«   2022/09   »
        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
4
Total
276,690
09-30 04:40
관리 메뉴

lancelot.com

constructor 본문

프로그래밍

constructor

lancelot50 2022. 8. 5. 00:52
  • 생성자 호출 원리
#include<iostream>
struct BM	// BaseMember
{
	BM() { std::cout << "BM()" << std::endl; }
	~BM() { std::cout << "~BM()" << std::endl; }
};

struct DM	// DerivedMember
{
	DM() { std::cout << "DM()" << std::endl; }
	DM(int) { std::cout << "DM(int)" << std::endl; }
	~DM() { std::cout << "~DM()" << std::endl; }
};

struct Base
{
	BM bm;
	Base() { std::cout << "Base()" << std::endl; }
	Base(int a) { std::cout << "Base(int)" << std::endl; }
	~Base() { std::cout << "~Base()" << std::endl; }
};

struct Derived : public Base
{
	DM dm;
	Derived() { std::cout << "Derived()" << std::endl; }
	Derived(int a) { std::cout << "Derived(int)" << std::endl; }
	~Derived() { std::cout << "~Derived()" << std::endl; }
};

int main()
{
	Derived d1;
}

  1. 생성자, 소멸자 호출의 정확한 원리
    • 컴파일러가 "기반클래스" 및 "멤버데이터"의 생성자(소멸자)를 호출해주는 코드를 생성해 주는 것
  2. 생성자/소멸자 호출순서
    • 기반 클래스 멤버(BM)의 생성자
    • 기반 클래스 (Base)의 생성자
    • 파생 클래스 멤버(DM)의 생성자
    • 파생 클래스 (Derived)의 생성자
  3. 사용자가 생성자 호출 순서를 변경할 수 없다.
  4. 컴파일러가 생성한 코드는 항상 디폴트 생성자를 호출한다.

 

  • 생성자에서는 가상함수가 작동하지 않음

 

0 Comments
댓글쓰기 폼