c++特殊构造函数怎么用
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章给大家分享的是有关c++特殊构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。拷贝构造函数拷贝构造:是C++特有的,他是一种特殊的构造函数用于基于一个同一
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
bv310系统升级服务器地址
江苏服务器阵列卡使用云空间
鸿文教育软件开发人员
网络技术对传统会计的影响
管理员更改数据库密码是什么
潜江市天气预报软件开发
服务器bios设置
安全与风险管理数据库
flask数据库封装
复杂数据库安全
web前端软件开发价钱是多少
分子建模数据库
郑州苹果软件开发
互联网科技创业有什么好项目
dmp导入到指定服务器
db2查看数据库事物级别
机关网络网络安全工作总结
网络安全游戏视频
互联网科技智库
经桥软件开发
软件开发前的文档
软件开发可追溯性
宁波安卓软件开发管理
软件开发加工
乐亭数据网络技术答疑解惑
会上报数据库吗
县级融媒体网络安全运维
ios互联网科技公司取名
青少年网络安全论文范文
青岛网络安全举报中心