C++ 상속 - 상속의 기본

진경천·2023년 10월 21일
0

C++

목록 보기
52/90
#include <iostream>

using namespace std;

class Base {	
protected:		// 자식 클래스에선 접근이 가능하고 그 외에서 접근을 막음
	int num;
public:

	void func() {
		cout << num << endl;
	}
	void add(int value) {
		num += value;
	}
};

class Derived : public Base {
public:
	void foo() {		// 자식 클래스에선 부모 클래스에 조건없이 접근 가능
		num = 10;
		add(20);
		func();
	}
};

int main() {
	Derived d;
	//d.num = 30;	protect로 인해 메인함수에선 접근 불가
	d.foo();
}
  • 실행 결과

    30

#include <iostream>

using namespace std;

class A {

};

class B0 : public A {

};

class B1 : public A {

};

class C0 : public B0 {

};

class C1 : public B0 {

};

class C2 : public B1 {

};

class C3 : public B1 {

};

/*			A	
	    B0		B1
	  C0  C1  C2  C3

	위와 같은 트리구조로 볼 수 있음.
*/

int main() {
	C0 c0;
	C1 c3;

}

위 이미지를 보면 트리 구조 형식으로 상속이 이루어진 것을 알 수 있다.

#include <iostream>

using namespace std;

class Base {
private:
	int num;
public:
	Base() : num(0) {
		cout << "Base" << endl;
	}
	//	자식 클래스에서 부모의 생성자를 지정을 안해주면 인수가 아무것도 없는 디폴트 생성자가 호출됨
	Base(int num) : num(num) {
		cout << "Base(" << num << ")" << endl;
	}

	virtual ~Base() {	// virtual이 없다면 포인터 bp 소멸시 부모 클래스 소멸자만 호출
		cout << "~Base" << endl;
	}

	void print() {
		cout << num << endl;
	}
};

class Derived : public Base {
public:
	using Base::Base;

	~Derived() {
		cout << "~Derived" << endl;
	}
};

int main() {
	Derived d0(30);
	Derived d1;
	d0.print();
	d1.print();
	Base* bp = new Derived;
	delete bp;
}

// 생성 될 때는 부모 -> 자식 순으로 생성
// 소멸 될 때는 자식 -> 부모 순으로 소멸
  • 실행 결과

    Base(30)
    Base
    30
    0
    Base
    ~Derived
    ~Base
    아래는 d0, d1이 해제되는 과정임.
    ~Derived
    ~Base
    ~Derived
    ~Base

profile
어중이떠중이

0개의 댓글