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 }