总时间限制: 1000ms 内存限制: 65536kB
描述
下面程序的输出是:ios
10
请补足Sample类的成员函数。不能增长成员变量。函数
#include <iostream> using namespace std; class Sample{ public: int v; Sample(int n):v(n) { } // 在此处补充你的代码 }; int main() { Sample a(5); Sample b = a; cout << b.v; return 0; }
输入spa
无
输出code
10
样例输入对象
无
样例输出内存
10
先上完整的题解代码io
#include<iostream> using namespace std; class Sample{ public: int v; Sample(int n):v(n){} Sample(Sample& s){ v = 10; } }; int main(){ Sample a(5); Sample b = a; cout<<b.v<<" "<<a.v; return 0; }
在代码 Sample b = a;
中,这里的=
是初始化,而不是赋值,在用同类型的对象对对象初始化的时候会调用复制构造函数。形如Sample(Sample& s)
,以同类型的引用做为构造函数的参数的构造函数是复制构造函数。在 Sample b = a;
中,a是复制构造函数的参数,调用构造函数的对象的v的值被赋值为10。class
调用复制构造函数的三种状况stream
1.初始化:当用一个对象去初始化同类的另外一个对象时 2.函数参数:若是某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数被调用 3.函数返回值:若是函数的返回值是类A的对象时,则函数返回时,A的复制构造函数被调用