拷贝构造函数的自动调用

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,849评论 1 32
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,150评论 1 51
  • 动态内存分配 关于堆C++程序的内存格局通常分为四个区:全局数据区、代码区、栈区、堆区 全局变量、静态数据、常量存...
    黄巴巴阅读 3,547评论 0 0
  • 你为什么想改变?源于对现有情况的不满和恐惧。就像只能接受孩子笑容和努力的家长,对哭闹和负面情绪难以包容。只允许好的...
    唐铭含阅读 1,235评论 0 4
  • 遇见仿佛是一种神奇的安排,它是一切的开始。你和大家的遇见,让我们彼此之间,感受到更多的美好。 我想因为陪伴很温暖,...
    我刚阅读 1,872评论 0 0