读书人

上面程序的结果是多少?如何分析的 多

发布时间: 2012-10-18 13:46:55 作者: rapoo

下面程序的结果是多少?怎么分析的 谢谢!!!!

C/C++ code
class Base{public:       int m_a;       Base(int a = 2):m_a(a){printf("A %d",m_a);}       virtual ~Base() {printf("B %d",m_a);}};class Derived : public Base {public:       Derived (int a = 4):Base(a){printf("C %d",m_a);}       ~Dwrived (){printf("D %d",m_a);}};int main(){      Base *aa,bb;      aa =new Derived;      delete aa;      return 0;}


[解决办法]
对不起,还漏了一个,最后在退出main()函数时(退回到startup code),此时局部对象bb超出作用域范围,所以发生析够,所以结果应该还增加一项: B 2.即最终结果为:
A 2A 4C 4D 4B 4B 2
[解决办法]
C/C++ code
class Base{public:       int m_a;       Base(int a = 2):m_a(a){printf("A %d",m_a);}       virtual ~Base() {printf("B %d",m_a);}};class Derived : public Base {public:       Derived (int a = 4):Base(a){printf("C %d",m_a);}       ~Derived (){printf("D %d",m_a);}};int main(){      Base *aa,bb;      aa =new Derived;      delete aa;      return 0;}//记住:构造是先从父类开始构造,再到子类,析构以相反的方向析构! 

读书人网 >C++

热点推荐