C++类对象的复制-拷贝构造函数

在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如:

int a = 10;

int b =a;

自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如:

#include <iostream>using namespace std;class Test{public:    Test(int temp)    {        p1=temp;    }protected:    int p1;};void main(){    Test a(99);    Test b=a;}

普通对象和类对象同为对象,他们之间的特性有相似之处也有不同之处,类对象内部存在成员变量,而普通对象是没有的,当同样的复制方法发生在不同的对象上的时候,那么系统对他们进行的操作也是不一样的,就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的,在上面的代码中,我们并没有看到拷贝构造函数,同样完成了复制工作,这又是为什么呢?因为当一个类没有自定义的拷贝构造函数的时候系统会自动提供一个默认的拷贝构造函数,来完成复制工作。

下面,我们为了说明情况,就普通情况而言(以上面的代码为例),我们来自己定义一个与系统默认拷贝构造函数一样的拷贝构造函数,看看它的内部是如何工作的!

代码如下:

#include <iostream>using namespace std;class Test{public:    Test(int temp)    {        p1=temp;    }    Test(Test &c_t)//这里就是自定义的拷贝构造函数    {        cout<<"进入copy构造函数"<<endl;        p1=c_t.p1;//这句如果去掉就不能完成复制工作了,此句复制过程的核心语句    }public:    int p1;};void main(){    Test a(99);    Test b=a;    cout<<b.p1;    cin.get();}

上面代码中的Test(Test &c_t)就是我们自定义的拷贝构造函数,拷贝构造函数的名称必须与类名称一致,函数的形式参数是本类型的一个引用变量,且必须是引用。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 函数
, 拷贝
, 复制构造函数
, 代码
, test
, temp
默认拷贝函数
拷贝构造函数、c 拷贝构造函数、拷贝构造函数的作用、默认拷贝构造函数、java拷贝构造函数,以便于您获取更多的相关知识。

时间: 2024-08-03 14:14:46

C++类对象的复制-拷贝构造函数的相关文章

使用new分配内存的类需要自己定义拷贝构造函数

13.22 假定我们希望HasPtr的行为像一个值.即,对于对象所指向的string成员,每个对象都有一份自己的拷贝. #include<iostream> #include<string> #include<new> using namespace std; class HasPtr { public: HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<"const

c++拷贝构造函数(深拷贝,浅拷贝)详解

一.什么是拷贝构造函数      首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a;     而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.  下面看一个类对象拷贝的简单例子.    #include<iostream> using namespace std; class CExample { private: int a; public: //构造函数 CExample(int b) { a=b; printf(&q

C++类对象的拷贝构造函数分析

对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #include <iostream>using namespace std;class CA{ public: CA(int b) { a=b; } void Show () { cout<<a<<endl; } private: int a;};int main(){

C++类对象的深拷贝、浅拷贝构造函数

在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include <iostream>using namespace std;class Test{public: Test(int temp) { p1=temp; }protected: int p1;};void main(){ Test a(9

关于拷贝构造函数和赋值运算符

重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符. 以下讨论中将用到的例子: class CExample { public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete pBuffer;} void Init(int n){ pBuffer=new char[n]; nSize=n;} private: char *pBuffer; //类的对象中包含指针,指向动态分配的内存资源 int nSize

浅析拷贝构造函数

这篇文章,主要是受Jinhao (辣子鸡丁·GAME就这样OVER了 )在CSDN上一篇题为<有关拷贝构造函数的说法不正确的是>的帖子启发,鸡丁就这四个问题回答如下.    拷贝构造函数的名字和类名是一样的 [错]    类中只有一个拷贝构造函数 [错]    拷贝构造函数可以有多个参数 [对]          拷贝构造函数无任何函数类型 [错] 在这里我不想讨论以上问题的正确与错误,只是讨论一下构造函数,拷贝构造函数,可能还会涉及到赋值函数,析构函数,这些都属于类中的特殊函数.至于以上问题

C++之拷贝构造函数

一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plaincopy int a = 100;   int b = a;    而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对象拷贝的简单例子. [c-sharp] view plaincopy #include <iostream>   using namespace std;      class CExample {   privat

C++拷贝构造函数(深拷贝,浅拷贝)

对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #include <iostream>using namespace std;class CExample {private:    int a;public:    CExample(int b)    { a=b;}    void Show ()    {        cout<<

C++拷贝构造函数详解

转自:http://blog.csdn.net/lwbeyond/article/details/6202256 对于一个空类,编译器默认生成四个成员函数:默认构造函数.析构函数.拷贝构造函数.赋值函数: 一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. 1 #include <iostream> 2 us