1. 程式人生 > 其它 >C++繼承和組合的初始化順序

C++繼承和組合的初始化順序

測試程式碼
// ConsoleApplication10.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

#include <iostream>

struct ZZ {
	//
	ZZ() {
		std::cout << "Con-ZZ" << std::endl;
	}
	//
	~ZZ() {
		std::cout << "De-ZZ" << std::endl;
	}
};

struct YY {
	//
	YY() {
		std::cout << "Con-YY" << std::endl;
	}
	//
	~YY() {
		std::cout << "De-YY" << std::endl;
	}
};

struct VZZ {
	//
	VZZ() {
		std::cout << "Con-VZZ" << std::endl;
	}
	//
	~VZZ() {
		std::cout << "De-VZZ" << std::endl;
	}
};

struct XX :public ZZ,virtual VZZ{

	//
	XX() {
		std::cout << "Con-XX" << std::endl;
	}
	//
	~XX() {
		std::cout << "De-XX" << std::endl;
	}

private:
	YY y;
	VZZ z;
};




int main()
{
	//
	XX a;
    std::cout << "Hello World!\n";
}
//
//輸出 VS2017
//Con - VZZ
//Con - ZZ
//Con - YY
//Con - VZZ
//Con - XX
//Hello World!
//De - XX
//De - VZZ
//De - YY
//De - ZZ
//De - VZZ
//初始化順序
//1.基類
//2.成員