www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第6章/s6_2/smain6_2.cpp

    //Download by http://www.NewXing.com
//文件名:smain6_2.cpp
//构造函数、析构函数往往不适合作内联函数

#include <iostream>

using namespace std;

class CPerson;					//前向声明
class CStudent;					//前向声明

class CNode						//结点类
{
	friend CPerson;
	friend CStudent;
public:
	CNode(){ }
	virtual ~CNode(){ }					//
	double d[100];				//double占8字节,共800字节
	//...						//结点类可能有一个复杂的构建过程
};

class CPerson					//基类
{
public:
	CPerson(){};
	virtual ~CPerson(){};		//析构函数应声明为虚函数
	//...
private:
	CNode oCNode1, oCNode2;		// 基类成员1和2,共1600字节
};

class CStudent: public CPerson  //派生类
{
public:
	CStudent(){};               // CStudent的构造函数是空的,但,真的是空的吗?
	virtual ~CStudent(){};
	//...             
private:
	CNode oCNode1, oCNode2, oCNode3;     // 派生类成员1~3,共2400字节
};

/* 
// 一个CStudent构造函数的可能的实现 
CStudent::CStudent()
{
	// 如果在堆上创建对象,为其在堆上分配堆内存
	//if (本对象在堆上)
	//	this = ::operator new(sizeof(CStudent));
	CPerson::CPerson();       // 初始化CPerson部分,在这里也会两次调用CNode()
	CNode::CNode();           // 构造oCNode1
	CNode::CNode();           // 构造oCNode2
	CNode::CNode();           // 构造oCNode3
}
*/

void main()
{
	CStudent d;		//构建一个CStudent类对象
	cout << sizeof(d) << endl;	//显示:4000
	CPerson p;
	cout << sizeof(p) << endl;	//显示:1600
	CNode n1;
	cout << sizeof(n1) << endl;	//显示:800
}