复制构造函数(C++)

复制构造函数定义
◆复制构造函数是一种特殊的构造函数,其形参为本类的对象引用。
作用是用一个已存在的对象去初始化同类型的新对象。

◆class类名{

public :
类名(形参) ; //构造函数
类名( const类名&对象名) ; //复制构造函数
/.....
};
类名:类( const 类名&对象名) //复制构造函数的实现
{函数体
}
复制构造函数被调用的三种情况
◆定义一个对象时,以本类另-个对象作为初始值,发生复制构造;
◆如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;
◆如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时无名对象 ,传递给主
调函数,此时发生复制构造。


隐含的复制构造函数
◆如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成
一个隐含的复制构造函数。
◆这个构造函数执行的功能是:用初始值对象的每个数据成员,初始
化将要建立的对象的对应数据成员。


”= delete"
如果不希望对象被复制构造
◆C+ + 98做法:将复制构造函数声明为private,并且不提供函数的实现。
◆C++11做法:用"=delete" 指示编译器不生成默认复制构造函数。
例:
class Point { //Point 类的定义
public:
Point(int xx=0, int yy=0){x= xx;y=yy;} //构造函数 ,内联
Point(const Point& p) =delete; //指示编译器不生成默认复制构造函数
private:
int x, y; //私有数据
};

实例:

#include "stdafx.h"
#include<iostream>
using namespace std;

class Point{
public:
    Point(int xx=0,int yy=0){
        x=xx;
        y=yy;
    }
    Point(Point &p);
    int getX(){return x;}
    int getY(){return y;};
private:
    int x,y;

};
//成员函数的实现
Point::Point(Point &p)
{
    x=p.x;
    y=p.y;
    cout<<"Calling the copy constructtor"<<endl;
}


//形参为Point类对象的函数
void fun1(Point p)
{
    cout<<p.getX()<<endl;
}
//返回值为Point类对象的函数
Point fun2()
{
    Point a;
    return a;
}

int _tmain(int argc, _TCHAR* argv[])
{
    Point a(4,5);
    Point b=a;//1、用A初始化B,调用拷贝构造函数
    cout<<b.getX()<<endl;
    fun1(b);    //2、对象B作位fun1的实参,调用拷贝构造函数
    b=fun2();   //3、函数的返回值是类对象,函数返回时,调用拷贝构造函数
    cout<<b.getX()<<endl;
    system("pause");
    return 0;
}

结果:

发布了24 篇原创文章 · 获赞 7 · 访问量 3766

猜你喜欢

转载自blog.csdn.net/qq_39980334/article/details/104311425