c++特殊构造函数怎么用
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家分享的是有关c++特殊构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。拷贝构造函数拷贝构造:是C++特有的,他是一种特殊的构造函数用于基于一个同一
千家信息网最后更新 2025年11月07日c++特殊构造函数怎么用
这篇文章给大家分享的是有关c++特殊构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
拷贝构造函数
拷贝构造:是C++特有的,他是一种特殊的构造函数
用于基于一个同一个类的的第一个对象去创造和初始化的一个对象
第一的参数是本类的对象的引用(const)
一、什么是拷贝构造函数
一种特殊的构造函数,同一个类的一个对象去创造或初始化一个对象
在没写的时候,是默认存在的,自己写了之后,系统默认的就会消失(这一点,就是构造函数)
拷贝构造函数可以实现:对象的复制
class Monster{public: Monster(Monster& m) //拷贝构造函数(默认形态) { //默认的拷贝构造函数(默认形态),将对象一一对应给值 cout << "默认的拷贝构造函数(默认形态) " << endl; this->hp = m.hp; } Monster(int hp); //构造函数 ~Monster(); //析构函数 void show();private: int hp;};int main(){ Monster monster1(100); monster1.show(); Monster monster3 = monster1;//使用monster1给monster3初始化 monster3.show(); Monster monster4(monster1);//使用monster1去构造monster4 monster4.show(); return 0;}Monster::Monster(int hp){ cout << "调用了带参构造函数" << endl; this->hp = hp;}Monster::~Monster(){ cout << "调用了析构函数" << endl;}void Monster::show(){ cout << "调用了显示函数" << endl; cout<hp << "" << endl; } 二、调用时机
一、函数的参数是:"类的对象"
二、函数的返回值是类的对象
三、使用一的对象给另一个对象初始化
四、使用一个对象构造另一个对象
注意
赋值不属于拷贝构造,所以不调用拷贝构造函数
浅拷贝和深拷贝
浅拷贝就是默认的拷贝构造函数,这个拷贝构造的操作,我们可以理解为,是用‘=’号一个一个的赋值的,我们将之称为,浅拷贝,因为在用指针的时候就可以能会出现问,因为我们知道两个同等类型的指针之间用‘=’号赋值,是两个指针的地址指向同一个内存,那么就可能会存在一个问题,就是两个对象的指针都指向同一个内存,那么如果其中一个对象把该内存释放了,就会导致另外一个对象的指针变成野指针。
为此,我们就需要进行到深拷贝。
public: int *p; Rect(); ~Rect(); int width;//宽 int height;//高 //重载拷贝构造,实现浅拷贝拷贝 Rect(Rect&rect) { this->height = rect.height; this->width = rect.width; this->p=rect.p; }public: int *p; Rect(); ~Rect(); int width;//宽 int height;//高 //重载拷贝构造,实现深拷贝 Rect(Rect&rect) { this->height = rect.height; this->width = rect.width; this->p = new int;//重新申请内存 *p = *rect.p;//拷贝之前的值 }可见,浅拷贝与深拷贝的差距就是前者是直接拷贝指针,让两个指针同时指向一个地址,这样一方进行析构的时候,另一方就会成为野指针,而深拷贝就是避免了这一点,申请一块新内存,并复制这块内存的数据。
感谢各位的阅读!关于"c++特殊构造函数怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
拷贝
函数
对象
指针
内存
就是
特殊
两个
形态
指向
时候
c++
一方
内容
参数
地址
更多
篇文章
不错
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
统战部门网络安全自查报告
物流信息技术数据库
资源管理器中怎么打开服务器
译钦网络技术
墨西哥服务器可以用信用卡吗
中小企业erp软件开发企业
证书密钥管理服务器
t3数据库安装不兼容
广东服务器机柜价钱多少
南昌软件开发公司报价
怎样查看数据库备份
非关系性数据库的优缺点
网络安全之webshell
小白数据库信号
众族网络技术有限公司
上海防水网络技术联系方式
奉贤区网络技术服务信息推荐
软件开发需要的许可证
海陵区网络技术联系方式
隐藏服务器ip 安全盾
网络技术题库app
服务器1台服务器可以分离吗
一家小型的软件开发公司人员构成
勇帝网络技术服务工作室
浙江网络技术创新服务
清华出版社数据库答案
嵌入式现场管理服务器价格
南京微源互联网络科技
湖北企业软件开发如何收费
办公厅组织开展网络安全检查