有如下程序: #include<iostream> using namespace std; class A { public: A(){cout<<'A';} ~A(){cout<<'~A';) }; class B:public A { A*p; public: B(){cout<<'B';p=new A;} ~B(){cout<<'~B';delete p;} }; int main() { B obj; return 0; } 执行这个程序的输出结果是( )。 D.ABA~A~B~A
A.BAA~A~B~A B.ABA~B~A~A C.BAA~B~A~A
【参考答案】
B 解析:此题考查的是类的构造函数和析构函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。因此本题中,首先调用基类构造函数输出A,然后调用于对象的构造函数输出B,......