【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
#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++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++中子类继承父类构造器和析构器的执行顺序
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++ 三种继承方式和构造函数执行的顺序
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++多继承构造函数执行顺序
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容 【转】 参考度4.6星
- c++多重继承的构造执行顺序
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++继承时构造函数执行顺序
- C++继承体系下构造的执行顺序
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容 【转】 参考度4.6星
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++多继承中菱形继承构造函数与析构函数执行的顺序