1 분 소요

1. Friend ClassPermalink

  • C가 friend로 지정해둔 class는 C의 private, protected member까지 모두 접근 가능하다.
  • 단, 일반향 선언이다. 쌍방향을 원하면 상대로 friend로 지정해야 한다.
class Square{
	friend class Rectangle;
	private:
		int side;
};  

void Rectangle::convert(Square a){
	width = a.side;
	height = a.side;
}

2. Abstract ClassPermalink

  • 인스턴스화(object 생성)할 수는 없지만 상속될 수 있는 Class
  • 하나 이상의 method가 Pure Virtual이면 Abstact Class이다.
    • =0 혹은 =NULL로 선언된 virtual method

        virtual void EndMonth(void) = NULL
      

3. 상속(Inheritance)Permalink

  • 기존 클래스를 가져와서, 새로 추가되는 부분만 구현한다.
  • 재사용성이 생긴다.
  • 트리와 같은 구조로 표현할 수 있다.
  • 마크 : :
// class 상속
class Mommabear : public Bear {
}

a. Access Specifier in InheritancePermalink

  • 상속하는 Class 앞 Access Specifier로, 부모 클래스 속 accessibility를 바꿀 수 있다.
  • 원래 정의된 accessibility와 상속하며 붙인 access specifier 중 보안 정도가 강한 것으로 적용된다.
  • Access Specifier : public, protected, private(default)

b. BindingPermalink

  • object가 message를 받으면 해당하는 method가 호출되는 것을 의미한다.
  • message는 호출된 클래스에서 시작해서 부모 클래스들로 타고 올라가며(travel-up), 처음 만나는 method를 binding한다.
  • 종류
    • static binding
      • 일반적인 케이스.
      • compile time에 binding한다.
    • dynamic binding
      • virtual keyword가 사용될 때
      • run time에 binding
      • 대역(substitution)이 사용되었을 때 필요하다. compile time에는 포인터가 부모 클래스를 가리키고 있지만, runtime에 대역인 자식 클래스 object가 생성되어 override 했을 수 있기 때문이다.

c. Multiple parentsPermalink

  • 여러 부모를 동시에 상속할 수 있다.
class Triangle: public Polygon, public Output {
	...
}; 

d. Class Substitutions(대역)Permalink

  • 자식 클래스는 부모 클래스의 대역이 될 수 있다.
  • 즉, 부모 클래스로 선언한 object에 자식 클래스를 넣을 수 있다.
  • 그 역은 성립하지 않는다.

e. 상속 불가능한 Class MemebersPermalink

  • constructor, destructor
  • operator member
  • friend class
  • private members
    • private data의 경우, 상속은 되어 자식 object의 메모리에 존재하나 접근할 순 없다.

f. Parent’s constructor, destructor callingPermalink

  • constructor와 destructor 의 경우, 상속되진 않지만 자동으로 부모&조상 클래스들의 constructor와 destructor를 호출한다.
  • 상속으로 합쳐지는 것이 아니라, 각각 순차적으로 모두 부르는 것이다.
  • 부르는 순서
    • constructor : 조상 → 부모 → 자식
    • destructor : 자식 → 부모 → 조상
  • 부모 클래스의 constructor들이 여러 개일 경우, initialization list를 통해 지정할 수 있다.

      class Son : public Mother {
      	public:
      		Son (int a) : Mother (a) { cout << "Son: int parameter\n\n"; }
      };
    
    • 지정하지 않을 경우, argument가 없는 default constructor가 호출된다.
      • 만약 부모 class에 default constructor가 없으면 error 발생
  • 자식 class의 constructor가 parent가 아닌 할아버지 클래스의 constructor를 직접 호출할 수는 없다.

태그:

카테고리:

업데이트: