题目
在C++中,以下程序输出正确的是()#includeclass Base {public:Base() ( std::cout << "P"; )~Base() ( std::cout << "p"; )};class Sub : public Base {public:Sub() ( std::cout << "S"; )~Sub() ( std::cout << "s"; )private:Base b;};int main() {Sub s;return 0;}A SPPppsB PPSppsC PPSspp
在C++中,以下程序输出正确的是()
#include
class Base {
public:
Base() { std::cout << "P"; }
~Base() { std::cout << "p"; }
};
class Sub : public Base {
public:
Sub() { std::cout << "S"; }
~Sub() { std::cout << "s"; }
private:
Base b;
};
int main() {
Sub s;
return 0;
}
A SPPpps
B PPSpps
C PPSspp
题目解答
答案
在`Sub`对象`s`的创建过程中:
1. 先调用`Base`的构造函数(继承部分),输出`"P"`。
2. 再调用`Base b`的构造函数(成员对象),输出`"P"`。
3. 最后调用`Sub`的构造函数,输出`"S"`。
销毁时:
1. 先调用`Sub`的析构函数,输出`"s"`。
2. 再调用`Base b`的析构函数,输出`"p"`。
3. 最后调用`Base`的析构函数(继承部分),输出`"p"`。
综上,输出为`"PPSspp"`。
答案:C. PPSspp