填写程序所缺代码,并回答相关问题: #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; }
时间: 2023-10-30 17:11:53 浏览: 75
程序员面试宝典题目总结
5星 · 资源好评率100%
#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() : a1(0), a2(0) {
b=0;
cout<<"B类的无参构造函数被调用,b="<<b<<endl;
}
B(int x,int y, int z): a1(y), a2(z) {
b=x;
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. 在B类的无参构造函数中,需要用成员初始化列表初始化a1和a2,因为它们是类类型对象,没有默认初始化。
2. 在B类的有参构造函数中,需要用成员初始化列表初始化a1和a2,因为它们是类类型对象,没有默认初始化。
*/
阅读全文