复制构造函数
admin
2024-02-24 14:36:26

和普通构造函数的区别:

普通构造函数在对象创建时被调用。
复制构造函数在用已有对象复制到一个新对象时被调用。
复制构造函数由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其形参必须是引用,但并不限制为const,一般普遍的会加上const限制。

何时调用

  1. 一个对象作为函数参数,以值传递的方式传入函数体;
  2. 一个对象作为函数返回值,以值传递的方式从函数返回;
  3. 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);

如果在类中没有显式的声明一个拷贝构造函数,那么,编译器会自动生成一个来进行对象之间非static成员的位拷贝。
举例:
1、声明复制构造函数

#include 
#ifndef STRNGBAD_H_
#define STRNGBAD_H_
class StringBad
{private:int a;int b;public:StringBad(const StringBad &s);// 声明复制构造函数StringBad();// 声明构造函数~StringBad();
};
#endif

2、定义复制构造函数

StringBad::StringBad(const StringBad &s)
{a = s.a;b = s.b;
}

调用举例

1、函数参数为类的对象

void func(StringBad p) // 函数形参为类的对象
{cout << p.a;
}
int main()
{p(1,2);// 构造出对象p.func(p);// 将实参传递给形参完成一个拷贝,会调用复制构造函数return 0;
}

2、函数的返回值为类的对象时

StringBad func()
{StringBad s (1,2);return s;
}
int main()
{StringBad p = func();return 0;
}

3、对象赋值初始化

int main()
{StringBad p1(1,2); // 构造函数创建对象p1。StringBad p2(p1);//用对象p1 复制出对象p2(通过复制构造函数实现)return 0;
}

参考链接

相关内容

热门资讯

慢病人群严冬如何保养 近期,北方多冷空气活动,气温变低、空气干燥,室内活动增多且通风不足,增加了疾病传播风险。尤其对于高血...
养老保险退休年龄最新或2023... 养老保险退休年龄最新或2023(历届)最新消息  导读:中央关于退休年龄延5用10已敲定,备受关注的...
延迟退休年龄最新消息最新或20... 延迟退休年龄最新消息:专家建议延迟退休先从女职工开始  中国目前的社保缴费比例合理吗,改革出路在哪里...
最新或2023(历届)海南省机... 养老保险全称社会基本养老保险是国家和社会根据一定的法律和法规为解决劳动者在达到国家规定的解除劳动义务...
最新或2023(历届)福建省机... 养老保险全称社会基本养老保险是国家和社会根据一定的法律和法规为解决劳动者在达到国家规定的解除劳动义务...