写出以下程序运行结果。 class CExample { private: int a; public: CExample(int b) { cout<<"1"; a = b; } CExample(const CExample& C) { a = C.a; cout<<"2"; } void Show ( ) { cout<<a<<endl; } ~CExample( ) { cout<<"3"; } }; CExample g_Fun() { CExample temp(0); temp.show(); return temp; } int main() { g_Fun(); return 0; }
时间: 2023-06-04 13:06:14 浏览: 104
& obj) { cout<<"2"; a = obj.a; } void Show() { cout<<a; } }; int main() { CExample obj1(1); CExample obj2 = obj1; obj2.Show(); return 0; }
程序运行结果为:121
解释:
1. 创建一个对象obj1,并输出字符1;
2. 创建另一个对象obj2,通过拷贝构造函数将obj1的成员变量a的值赋给obj2的成员变量a,输出字符2;
3. 调用obj2的成员函数Show(),输出a的值1。
相关问题
class CExample { private: int a; public: //构造函数 CExample(int b) { a = b; cout << "creat: " << a << endl; } //拷贝构造 CExample(const CExample& C) { a = C.a; cout << "copy" << endl; } //析构函数 ~CExample() { cout << "delete: " << a << endl; } void Show() { cout << a << endl; } }; //全局函数,传入的是对象 void g_Fun(CExample C) { cout << "test" << endl; } int main() { CExample test(1); //传入对象 g_Fun(test); return 0; }这个程序中为什么会调用拷贝构造函数
在程序中,对象 `test` 是通过构造函数 `CExample(int b)` 创建的,而在调用 `g_Fun(test)` 时,`test` 作为参数传递给了函数 `g_Fun`,这里的参数是按值传递的。因此,会发生对象的复制,即会调用拷贝构造函数 `CExample(const CExample& C)` 来创建一个新的对象,这个新对象与原对象 `test` 具有相同的值。所以在程序中会调用拷贝构造函数。
CExample(const CExample& C) { a = C.a; cout << "copy" << endl; }这个函数中的c和a分别代表什么可以举一个具体的例子说明吗
假设现在有一个CExample类,它有一个int类型的成员变量a:
```
class CExample {
public:
int a;
CExample() { a = 0; }
CExample(int n) { a = n; }
CExample(const CExample& C) { a = C.a; cout << "copy" << endl; }
};
```
现在我们创建两个CExample对象c1和c2:
```
CExample c1(10);
CExample c2(c1);
```
在创建c2时,我们调用了拷贝构造函数,拷贝c1的值到c2中。在拷贝构造函数中,C代表c1对象的引用,而a代表当前对象c2的成员变量a。因此,执行a = C.a; 的操作将c1对象的成员变量a的值复制到了c2对象的成员变量a中。同时,输出了一条信息"copy",表示当前正在进行拷贝操作。最终,c1和c2的值都为10,但它们是两个不同的对象。
阅读全文