C++拷贝构造函数的几个细节

 我来答
积极又高大灬丁香553
2018-08-31 · 超过14用户采纳过TA的回答
知道答主
回答量:53
采纳率:61%
帮助的人:4.1万
展开全部

一. 首先要明白什么是拷贝构造函数

首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:

[c-sharp] view plain copy

  • int a = 100;  

  • int b = a;   


  • 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。

  • 下面看一个类对象拷贝的简单例子。
  • [c-sharp] view plain copy

  • #include <iostream>  

  • using namespace std;  

  • class CExample {  

  • private:  

  • int a;  

  • public:  

  • //构造函数  

  • CExample(int b)  

  • { a = b;}  

  • //一般函数  

  • void Show ()  

  • {  

  • cout<<a<<endl;  

  • }  

  • };  

  • int main()  

  • {  

  • CExample A(100);  

  • CExample B = A; //注意这里的对象初始化要调用拷贝构造函数,而非赋值  

  • B.Show ();  

  • return 0;  

  • }  

  • 运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象 B 分配了内存并完成了与对象 A 的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。

    下面举例说明拷贝构造函数的工作过程。

    [c-sharp] view plain copy

  • #include <iostream>  

  • using namespace std;  

  • class CExample {  

  • private:  

  • int a;  

  • public:  

  • //构造函数  

  • CExample(int b)  

  • { a = b;}  

  • //拷贝构造函数  

  • CExample(const CExample& C)  

  • {  

  • a = C.a;  

  • }  

  • //一般函数  

  • void Show ()  

  • {  

  • cout<<a<<endl;  

  • }  

  • };  

  • int main()  

  • {  

  • CExample A(100);  

  • CExample B = A; // CExample B(A); 也是一样的  

  • B.Show ();  

  • return 0;  

  • }   


  • CExample(const CExample& C) 就是我们自定义的拷贝构造函数。可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式