Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1563701
  • 博文数量: 237
  • 博客积分: 5139
  • 博客等级: 大校
  • 技术积分: 2751
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-18 14:48
文章分类

全部博文(237)

文章存档

2016年(1)

2012年(4)

2011年(120)

2010年(36)

2009年(64)

2008年(12)

分类:

2011-04-13 13:17:02

/*当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的
构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。
简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是
要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,
如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。
下面的这个程序说明这个问题*/
//-------------------------------------------------
#include
using namespace std;
class Shape
{
public:
void Draw() {cout<<"Base::Draw()"<void Erase() {cout<<"Base::Erase()"<Shape() {Draw();} //基类构造函数,调用上面的Draw函数体
virtual ~Shape() {Erase();}//基类析构函数,调用上面的Erase函数体
};
//-------------------------------------------------
class Polygon:public Shape
{
public:
Polygon() {Draw();}
void Draw() {cout<<"Polygon::Draw()"<void Erase() {cout<<"Polygon Erase()"<~Polygon() {Erase();}
};
//--------------------------------------------------
class Rectangle:public Polygon
{
public:
Rectangle() {Draw();}
void Draw() {cout<<"Rectangle::Draw()"<void Erase() {cout<<"Rectangle Erase()"<~Rectangle() {Erase();}
};
//--------------------------------------------------
class Square:public Rectangle
{
public:
Square() {Draw();}
void Draw() {cout<<"Square::Draw()"<void Erase() {cout<<"Square Erase()"<~Square() {Erase();}
};
//--------------------------------------------------
int main()
{
Polygon c;
Rectangle s;
Square t;
cout<<"------------------------------------------"<return 0;
}
//------------------------------------------

运行结果:

Base::Draw()
Polygon::Draw()
Base::dRAW()
Polygon::Draw()
Rectangle::Draw()
Base::dRAW()
Polygon::Draw()
Rectangle::Draw()
Square::Draw()
------------------------------------------
Square Erase()
Rectangle Erase()
Polygon Erase()
Base::Erase()
Rectangle Erase()
Polygon Erase()
Base::Erase()
Polygon Erase()
Base::Erase()
Press any key to continue

阅读(7349) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~