填写程序所缺代码,并回答相关问题: #include <iostream> using namespace std; class A { private: int a; public: A() { a=0; cout<<"A类的无参构造函数被调用,a="<<a<<endl; } A(int x) { a=x; cout<<"A类的有参构造函数被调用,a="<<a<<endl; } ~A() { cout<<"A类的析构造函数被调用,a="<<a<<endl; } }; class B { private: int b; A a1; A a2; public: B() { b=0; cout<<"B类的无参构造函数被调用,b="<<b<<endl; } B(int x,int y, int z): (1) //分别用y,z去初始化a1、a2,用x去初始化b { (2) ; cout<<"B类的有参构造函数被调用,b="<<b<<endl; } ~B() { cout<<"B类的析构造函数被调用,b="<<b<<endl; } }; int main() { B obj1; cout<<endl; B obj2(10,20,30); cout<<endl; return 0; } 问题: (1)什么是封闭类? (2)封闭类带参数的构造函数如何书写? (3)封闭类的构造函数、析构函数如何执行?
时间: 2023-10-30 11:11:51 浏览: 52
程序员面试宝典题目总结
5星 · 资源好评率100%
(1) 封闭类是指在类内部定义了其他类的对象或指针的类。在本题中,类B内部定义了两个类A的对象a1和a2,因此B是一个封闭类。
(2) 封闭类带参数的构造函数需要在初始化列表中对内部定义的其他类对象进行初始化。在本题中,可以这样书写:
B(int x, int y, int z) : a1(y), a2(z)
{
b = x;
cout << "B类的有参构造函数被调用, b=" << b << endl;
}
(3) 封闭类的构造函数、析构函数执行顺序如下:
- 对象成员的构造函数按照声明的顺序执行;
- 封闭类自身的构造函数执行;
- 对象成员的析构函数按照声明的逆序执行;
- 封闭类自身的析构函数执行。
在本题中,当创建B类对象时,会先调用a1、a2的构造函数,再调用B的构造函数;当B类对象销毁时,会先调用B的析构函数,再调用a2、a1的析构函数。
阅读全文