«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
11-11 14:44
관리 메뉴

DevTzu

객체지향 프로그래밍 학습 본문

study

객체지향 프로그래밍 학습

DevTzu 2011. 1. 24. 23:32
반응형


1. 클래스
- 클래스란 무엇인가?
   '객체를 정의해 놓은것' 또는 '객체의 설계도 또는 틀' 이라고 정의할수 있다.
   클래스는 객체를 정의해 놓은 것이므로 클래스에는 객체의 모든 속성과 기능이 정의되어 있다.
   클래스로부터 객체를 생성하면, 클래스에 정의된 속성과 기능을 가진 객체가 만들어지는 것이다.

   예를 들면, TV설계도(클래스)는 TV라는 제품(객체)을 정의한 것이며, TV(객체)를 만드는데 사용된다.
   우리가 TV를 보기 위해서는 TV(객체)가 필요한 것이지 TV설계도(클래스)가 필요한 것은 아니며,
   TV설계도(클래스)는 단지 TV라는 제품(객체)을 만드는데만 사용될 뿐이다.
   그리고 TV설계도를 통해 TV가 만들어진 후에야 사용할 수 있는 것이다.

- 클래스는 어떤 경우에 사용하는가?
   클래스는 객체를 생성하는데 사용되며, 객체는 클래스의 정의된 대로 생성된다.

- 클래스는 어떻게 사용하는가?
#include<iostream.h>
 
class Number {
     private:
          int num; // 기본설정 즉 디폴드 설정이 private라 생략 가능
     public:
          Number(int data=0); // 인자가 없으면 알아서 0으로 초기화, 인자가 있으면 인자값으로 초기화
          ~Number(); // 이것이 소멸자
          void print();
};
 
Number::Number()  // 생성자
{
     num = data;
}
 
Number::~Number() // 소멸자
{
     cout<<"클래스가 소멸"<<endl;
}
 
void Number::print()
{
     cout<<num<<endl;
}
 
void main()
{
     Number a; // 인스턴스를 만드는 순간 생성자 자동 호출
     Number b(3);
 
     a.print();
     b.print();
}

 

2. 상속
- 상속이란 무엇인가?
   상속은(Inheritance)의 사전적 의미는 자식이 부모가 가진 모든 것을 물려 받는 것을 의미하는데 OOP의 
   상속도 기본적인 의미는 동일하다.
   이미 정의되어 있는 클래스의 모든 특성을 물려 받아 새로운 클래스를 작성하는 기법을 상속이라고 한다.
 
- 상속은 어떤 경우에 사용하는가?
   흔히 상속은 이미 만들어진 클래스를 재활용하기 위한 기법으로 소개되며 재활용이 상속의 가장 큰 장점이기는 
   하지만 상속에 의해 부차적으로 발생하는 효과도 있다. 상속을 하는 목적 또는 상속에 의한 효과는 다음 세가지로
   간략하게 요약할 수 있다.
   1. 기존의 클래스를 재활용한다. 가장 기본적인 효과이다.
   2. 공통되는 부분을 상위 클래스에 통합하여 반복을 제거하고 유지, 보수를 편리하게 한다.
   3. 공동의 조상을 가지는 계층을 만듬으로써 객체의 집합에 다형성을 부여한다.
 
- 상속은 어떻게 사용하는가?
#include <iostream>
using namespace std;
 
// 기반 클래스
class father {
     private:
          int a;
     protected:
          int b;
     public:
          void init();
          void print();
};
void father::init()
{
     a = 0;
     b = 0;
}
void father::print()
{
     cout<<a<<endl;
     cout<<b<<endl;
}
 
// 파생 클래스
class son : public father {
     public:
          void input(int);
          void print();
};
void son::input(int data)
{
     //a = data; // a는 private로 보호되어 있으므로 접근 불가
     b = data; // b는 접근 가능
}
void son::print() // son에서 상속 받으면서 같은 이름의 print()함수를 재정의
{
     //cout<<a<<endl; // 마찬가지
     cout<<b<<endl;
}
 
//메인
void main()
{
     son a;
 
     a.init(); // father클래스의 멤버함수에서 a, b를 0으로 초기화
     a.print(); // a는 private로 선언되있으므로 b만 출력 된다
 
     a.input(30); // son클래스의 멤버함수인 input함수를 이용하여 b에다 30을 넣어줌
     a.print(); // 30 출력
}



반응형
Comments