#include<iostream> using namespace std; class A{ public: int a; A(int n):a(n){} }; class B{ public: int b; A obj; //在此处添加代码 }; int main(){ B a1(10); B a2 = a1; B a3 = a2; cout<<a1.b<<","<<a1.obj.a<<endl; cout<<a2.b<<","<<a2.obj.a<<endl; cout<<a3.b<<","<<a3.obj.a<<endl; return 0; }输出结果:10,10 10,30 10,90
时间: 2023-10-30 17:20:44 浏览: 85
这段代码中,需要在 class B 中添加一个构造函数来初始化 A 类的 obj 成员。正确的代码如下:
```
#include<iostream>
using namespace std;
class A{
public:
int a;
A(int n):a(n){}
};
class B{
public:
int b;
A obj;
B(int n):b(n), obj(n*3){}
};
int main(){
B a1(10);
B a2 = a1;
B a3 = a2;
cout<<a1.b<<","<<a1.obj.a<<endl;
cout<<a2.b<<","<<a2.obj.a<<endl;
cout<<a3.b<<","<<a3.obj.a<<endl;
return 0;
}
```
输出结果为:
```
10,30
10,30
10,30
```
这是因为在 class B 的构造函数中,使用了参数 n 来初始化 obj,而 n 传入的是 B 的构造函数中的参数,所以 a1、a2、a3 对应的 obj 的 a 值都是 30。
相关问题
补全程序,并写出程序运行结果。 #include <iostream> using namespace std; class Class { public : Class ( int...
补全程序如下:
```
#include <iostream>
using namespace std;
class Class {
public:
Class(int num) {
cout << "Constructor with one argument called." << endl;
}
Class(int num1, int num2) {
cout << "Constructor with two arguments called." << endl;
}
};
int main() {
Class obj1(10);
Class obj2(20, 30);
return 0;
}
```
程序运行结果为:
```
Constructor with one argument called.
Constructor with two arguments called.
```
解释:
这是一个带有两个构造函数的类`Class`。第一个构造函数接受一个整数参数,第二个构造函数接受两个整数参数。在`main`函数中,我们创建了两个对象`obj1`和`obj2`,分别调用了两个不同的构造函数。所以,程序输出了两个不同的消息。
#include<iostream> using namespace std; class C { public: C(int a) { x = a; } private: int x; }; class D :public C { public: D(int a):y(a){} private: int y; }; 指出错误,并说明原因
在类D的构造函数中,没有显式调用基类C的构造函数,因为类D是从类C派生而来的。因为类C没有默认构造函数,所以必须显式调用基类C的构造函数并传递参数。所以错误的行为是在类D的构造函数中未显式调用基类C的构造函数。
正确的代码应该是这样的:
```cpp
#include <iostream>
using namespace std;
class C {
public:
C(int a) { x = a; }
private:
int x;
};
class D : public C {
public:
D(int a, int b) : C(a) { y = b; }
private:
int y;
};
int main() {
D d(1, 2);
return 0;
}
```
在类D的构造函数中,我们显式调用了基类C的构造函数并传递了参数a,这样,类D就可以正确地初始化基类C的成员变量x。