상속
- 상위 클래스의 멤버 변수와 메소드를 하위 클래스에서 사용할 수 있도록 한다
주의 상위 클래스에서 하위 클래스의 멤버 변수와 메소드 사용이 불가능하다
ex) class Base {
public:
void bFunc() { }
int bNum;
};
class Derived : public Base {
public:
void dFunc() { }
int dNum;
};
부모 클래스
- 자식 클래스로 상속을 해준 상위 클래스
자식 클래스
- 부모 클래스로 부터 멤버 변수와 메소드를 상속받은 하위 클래스
- 부모 클래스의 멤버 변수와 메소드에 추가 변수와 메소드를 더한다
주의 자식클래스가 부모클래스에 속해있다 부모클래스가 더 큰 범위의 클래스다
접근 제어
- 외부접근은 제한되지만 자식 클래스에서 접근은 가능하다
ex) class Base {
public:
int bPulbic; 외부 접근 o, 자식 클래스 접근 o
protected:
int bProtected; 외부 접근 x, 자식 클래스 접근 o
private:
int bPrivate; 외부 접근 x, 자식 클래스 접근 x
};
class Derived1 : public Base { /* 중략 */ };
class Derived2 : protected Base { /* 중략 */ }; Base 클래스의 public을 protected 수준으로 내린다
class Derived3 : private Base { /* 중략 */ }; Base 클래스의 public과 protected를 private 수준으로 내린다
클래스 오버라이딩
- 부모 클래스의 멤버 변수와 메소드를 오버라이딩 가능하다 부모클래스의 값이 바뀐것이 아닌 자식클래스가 우선이다
- override : 우선하다 함수의 overloading(이름이 같은 함수를 여러개 생성)과 overwriting(덮어쓰기)와 다르다
ex) class Base {
public:
int a = 10;
};
class Derived : public Base {
public:
int a = 20;
};
Base b;
Derived d;
cout << b.a << endl; 10
cout << d.a << endl; 20
cout << d.Base::a << endl; 10
cout << d.Drived::a << endl; 20
정적 바인딩
- 모호한 포인터가 어떤 타입을 가리키는지 결정하는 것을 바인딩이라고 한다
- 정적 바인딩은 포인터가 포인터의 타입을 가리키게 하는 바인딩이다
- C++의 기본은 정적 바인딩이다
ex) class Base {
public:
void print() { };
};
class Derived : public Base {
public:
void print() { };
};
Base *b = new Derived(); 부모 클래스의 포인터가 자식 클래스를 가리킬 수 있다
b->Print(); 부모 클래스의 메소드를 출력한다
delete b;
동적 바인딩
- 포인터가 자식 클래스의 타입을 가리키게 하는 바인딩이다
- 부모클래스에서 메소드에 virtual을 붙여준다
ex) class Base {
public:
virtual void print() { /* 중략 */ }; 가상 함수: 프로그램을 만들때는 알 수 없으니 실행될 때 결정되게끔 한다
};
class Derived : public Base {
public:
void print() { /* 중략 */ };
};
Base *b = new Derived();
b->Print(); 자식 클래스의 메소드를 출력한다
delete b;
추상 클래스
- 순수 가상 함수를 가지고 있는 클래스다
- 순수 가상 함수는 가상함수가 '= 0' 이나 'NULL'로 개체가 없는 함수다
- 클래스들을 하나로 묶어줄 때 유용하다
ex) class Shape {
public:
virtual double GetAre() = 0; 순수 가상 함수
virtual void Resize(double f) = 0;
};
생성자와 소멸자
- 생성자가 실행되는 순서는 부모클래스의 멤버 변수 -> 메소드 -> 자식 클래스의 멤버변수 -> 메소드이다
- 소멸자가 실행되는 순서는 생성자 실행 순서의 반대다
가상 소멸자
- 소멸자를 동적 바인딩 시켜주기 위해 사용한다
- 소멸자 앞에 virtual을 붙여준다
'Study > C C++' 카테고리의 다른 글
[두들낙서] 상속에서의 형변환 (0) | 2021.03.06 |
---|---|
[두들낙서] 묵시적 형변환 (0) | 2021.03.04 |
[두들낙서] 객체 복사 (0) | 2021.03.04 |
[두들낙서] 동적 할당 (0) | 2021.03.04 |
[두들낙서] 클래스와 객체 (0) | 2021.03.04 |