您的位置:首页 > 编程语言 > C语言/C++

【C++】简单的继承执行顺序

2014-05-22 10:09 477 查看
笔试里面考C++基础遇到了好几次这种题目。先上代码

#include<iostream>

using namespace std;

class A

{

public:
A()
{
printf("A\n");
}
~A()
{
printf("~A\n");
}
virtual void fun()
{
printf("AA\n");
}

};

class B :public A

{

public:
B()
{
printf("B\n");
}
~B()
{
printf("~B\n");

}
virtual void fun()
{
printf("BB\n");
}

};

int main()

{
B b;
A *a=&b;
a->fun();
return 0;

}

问执行之后的结果。若对C++的继承有所了解,答案应该很快就出来了。我们分析一下:B b:构造一个类B的对象,因为它是继承于类A,所以先执行A中的构造函数,然后再执行自己的构造函数;A *a=&b:声明一个指向A类型的指针,并指向对象b;此时a->fun()执行的就是类B里面的fun();最后main将要将要结束,要析构函数。那么是先析构谁呢?

当然是B,因为B是A的子类,然后才再执行A的析构函数。因为从逻辑里面分析,构造的时候,要先有父亲才有儿子 先A后B,而析构的时候,要反过来,先从小的开始”删“。

执行结果是:

A

B

BB

~B

~A
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ c++基础
相关文章推荐