程序设计与算法(三)第02周测验002:奇怪的类复制
本文是中国大学MOOC,北京大学程序设计与算法(三)C++面向对象程序设计第二周测验。
-
总时间限制:
1000ms
-
内存限制:
65536kB
-
描述
程序填空,使其输出9 22 5
#include <iostream> using namespace std; class Sample { public: int v; // 在此处补充你的代码 }; void PrintAndDouble(Sample o) { cout << o.v; cout << endl; } int main() { Sample a(5); Sample b = a; PrintAndDouble(b); Sample c = 20; PrintAndDouble(c); Sample d; d = a; cout << d.v; return 0; }
-
输入
无
-
输出
9 22 5
-
样例输入
None
-
样例输出
9 22 5
class Sample {
public:
int v;
// 在此处补充你的代码
};
类里面应该是填写构造函数
Sample a(5);
Sample b = a;
PrintAndDouble(b);
Sample c = 20;
PrintAndDouble(c);
Sample d;
d = a;
cout << d.v;
主函数里的Sample b = a;
可知是复制构造函数
Sample a(5);
Sample b = a;
PrintAndDouble(b);
上面语句调用了两次构造函数由5
到9
所以复制构造函数可以暂时写为
Sample(Sample &x)
{
v=x.v+2;
}
或
Sample(const Sample &x)
{
v=x.v+2;
}
又因为是用a初始化b,所以我们要保证a不变。故使用常引用版本。
再看到:
Sample d;
d = a;
cout << d.v;
所以我们需要写另一个构造函数:
Sample(int n = 0)
{
v=n;
}
构造函数中,需要把输入的参数加一个初始化,本题我们初始化为0,当然1,2,3,4都可以。
所以答案为:
Sample(int n=0)
{
v=n;
}
Sample(const Sample &x)
{
v=x.v+2;
}
提交,通过。记得下载通过码