拷贝构造函数的自动调用

2019-06-10  本文已影响0人  始于尘埃

跟着米sir学编程

//拷贝构造函数的自动调用

#include <iostream>
using namespace std;

class Point{

private:
    int x,y;
public:
    Point(int a=0,int b=0) //带默认参数的构造函数
    {
        x=a;
        y=b;
    }
    /*
    Point(Point &p){   //拷贝构造函数(已经存在一个对象p)
        x=p.x;
        y=p.y;
        
    }
    */
    int getX(){    //成员函数,获取x的坐标
        return x;
    }
    int getY(){
        return y;
    }
};

void func1(Point p){  //对象作为参数
    cout<<p.getX()<<','<<p.getY()<<endl;
}
Point func2(){ //对象作为返回值
    Point p(100,200);
    return p;
}
int main(){
    Point p1(10,20); //自动调用构造函数,初始化对象
    func1(p1); //自动调用拷贝函数
    Point p2; //自动调用构造函数(用默认参数进行初始化)
    func1(p2); //调用拷贝函数
    p2 = func2(); //调用拷贝函数
    func1(p2);
    system("pause");
    return 0;
}

/*
问题说明:
1.拷贝函数的作用,可以不用拷贝函数吗?
ans:
如果在定义类时,不定义拷贝函数,编译器会自动为类添加一个默认的拷贝构造函数,但是,
默认的拷贝只是浅拷贝的工作方式,即只进行二进制内存空间上的数据简单复制,不为数据成员分配空间内存。
浅拷贝只能完成基本类型的拷贝,若类中含有指针类型的数据成员(需要为成员动态内存空间),浅拷贝就可能造成危险,
因为有可能两个对象的指针指向同一个内存区域;
自定义的拷贝深拷贝,可以动态分配内存空间。
*/

上一篇 下一篇

猜你喜欢

热点阅读