拷贝构造函数的总结

博客围绕构造函数展开,介绍了其按参数和类型的分类,包含无参、有参和拷贝构造函数的写法与调用方式,还提及隐式类型转化,如 Person p7 = 100 相当于调用 Person(100),最后阐述了拷贝构造函数的调用时机和构造函数的调用规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数的分类及调用

  1. 按照参数分类

     1.无参构造(默认构造) 
     2.有参构造
    
  2. 按照类型分类

     1.普通构造函数
     2.拷贝构造函数
    
  3. 无参构造写法和调用

     Person  p1; 注意不能写Person (),因为编译器认为这个是函数声明
    
  4. 有参构造函数写法 和调用

     Person p2(10) 或者Person p2=Person(10)
     Person (10);匿名对象,执行当前行后释放这个对象
    
  5. 拷贝构造函数

     Person (const Person &p)
     Person  p1(p2)或者 Person p1=Person(p2);
     不能用拷贝构造函数初始化匿名对象
     		如果写成Person (p1) 这种写法等价于 Person p1
     		写到右值可以做拷贝构造函数
    
  6. Person p7 = 100; //相当于调用了 Person p7 =Person(100),隐式类型转化
    Person p8 = p7; //相当于Person p8=Person(p7)

  7. 拷贝构造函数调用时机

     1 用已经创建好得对象来初始化新得对象
     2 以值传递得方式给参数传参
     3 以值方式返回局部对象
    
  8. 构造函数的调用规则

     1 如果提供了有参的构造,系统不会提供默认的构造,还是会提供拷贝构造函数
     2 如果提供了拷贝构造函数,系统不会提供其他的构造函数了。
     3.系统默认给一个类提供3个函数 默认构造 ,拷贝构造,析构函数
    
C++ 中的拷贝构造函数是一种特殊的构造函数,用于在创建一个对象时,以另一个对象作为参数来初始化它。拷贝构造函数的声明如下: ```cpp class MyClass { public: MyClass(const MyClass& other); }; ``` 其中,other 是要拷贝的对象的引用。拷贝构造函数通常用于以下几种情况: 1. 通过值传递对象时,会调用拷贝构造函数来创建一个新的对象。 2. 在函数返回一个对象时,会调用拷贝构造函数来创建一个副本。 3. 在一个对象初始化另一个对象时,会调用拷贝构造函数。 在 C 语言中,没有拷贝构造函数的概念,但可以通过自己实现一些函数来模拟拷贝构造函数的功能。例如: ```c typedef struct { int x; int y; } Point; void point_copy(Point* dest, const Point* src) { dest->x = src->x; dest->y = src->y; } Point point_create(int x, int y) { Point p; p.x = x; p.y = y; return p; } int main() { Point p1 = point_create(1, 2); Point p2; point_copy(&p2, &p1); return 0; } ``` 在这个示例中,我们定义了一个 Point 结构体,并通过 point_create() 函数来创建一个 Point 对象。我们还定义了一个 point_copy() 函数,用于将一个 Point 对象拷贝到另一个对象中。在 main() 函数中,我们通过调用 point_copy() 函数来拷贝 p1 对象到 p2 对象中。 需要注意的是,在 C 语言中,拷贝构造函数的实现需要自己手动编写,而且需要特别注意内存管理,避免出现内存泄漏等问题。在 C++ 中,拷贝构造函数由编译器自动生成,可以方便地实现对象的拷贝。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值