データ・メンバーとしてクラス・オブジェクト

1970 ワード

Father.h
 
 
#ifndef FATHER_H
#define FATHER_H
#include"Mother.h"
class Father
{
public:
	Father(int a,int b);
	~Father(void);
private:
	Mother m;
	int i;
};
#endif

 Father.cpp
 
 
#include "Father.h"
#include<iostream>
using namespace std;
Father::Father(int a,int b):m(a,b),i(a)
{
	cout<<"father constructed!"<<endl;
	m.show();
	cout<<"I:"<<i<<endl;
}

Father::~Father(void)
{
	cout<<"father deconstructed!"<<endl;
}

 
Mother.h
 
#pragma once

class Mother
{
public:
	Mother(int a,int b);
	~Mother(void);
	void show();
private:
	int a;
	int b;
};

 
Mother.cpp
 
#include "Mother.h"
#include<iostream>
using namespace std;
Mother::Mother(int a,int b)
{
	this->a=a;
	this->b=b;
	cout<<"mother constructed!"<<endl;
}

Mother::~Mother(void)
{
	cout<<"mother deconstructed!"<<endl;
}

void Mother::show()
{
	cout<<"A:"<<a<<"B:"<<b<<endl;
}

 
Main.cpp
 
#include<iostream>
#include"Father.h"
using namespace std;
int main()
{
	Father f(1,2);
	return 0;
}

 
Motherのコンストラクション関数を呼び出し、Fatherのコンストラクション関数を呼び出し、Fatherのコンストラクション関数を呼び出し、最後にMotherのコンストラクション関数を呼び出します.
 
X::X()が呼び出されると、オブジェクトメンバーがクラスで定義した順序で、それらのコンストラクション関数が順次呼び出され、Xのコンストラクション関数が最後に実行され、コンストラクション関数の呼び出しが逆になります.