当前位置: 首页 > news >正文

c++ 的拷贝构造函数

当类成员变量有指针类型的时候,要自定义拷贝函数,不要使用默认的拷贝构造函数.因为默认的拷贝构造构造函数是浅拷贝是位拷贝的,只拷贝指针指向的空间而没有把空间里的内容一起拷贝过来,这样会导致改变其中的一个,另一个也会跟着一起改变(老婆也都一样的了)class Teacher

{
public:
Teacher(); // 自定义的无参构造函数
Teacher(string n, double a, string ad, char* work); // 自定义的无参构造函数
Teacher(const Teacher & other); //声明拷贝构造函数 other可不写; 必须要const 和引用&
void eat();
void sleep();
void setname(); //设置人名
void getname() const;
void setwork(char* work);
private:
char work; //指针
Teacher::Teacher():name("abd"), age(36), adrr("湖南省长沙市") //自定义无参构造函数初始化变量
{
work = new char[WORK_LEN]; //分配内存空间
strcpy_s(this->work,WORK_LEN,"山江");
}
Teacher::Teacher(string n, double a, string ad, char
work) : name(n), age(a), adrr(ad) //带参数的构造函数
{
work = new char[WORK_LEN]; //分配内存空间

if (work)
{strcpy_s(this->work, WORK_LEN, work);
}
else
{strcpy_s(this->work, WORK_LEN, "山江");
}

}

Teacher::Teacher(const Teacher& other):name(other.name),age(other.age),
adrr(other.adrr) //拷贝构造函数的实现
{
work = new char[WORK_LEN]; //重新分配空间关键()
strcpy_s(work, WORK_LEN, other.work); //other.work 形参

}
void Teacher::setwork(char * work) //设置工作
{
if (!work) //如果为空
{
return;
}
strcpy_s(this->work, WORK_LEN, work);
}
int main(void)
{

Teacher ls1;    //定义了一个老师1 ,此时的直接调用你自定义无参构造函数初始化变量
Teacher ls4 (ls1);	                 //这个时候会调用拷贝构造函数
cout << "没有做深拷贝ls1\n";
ls1.getname();
ls4.getname();cout << "做深拷贝ls1\n";
ls1.setwork((char*)"麻冲");
ls1.setname();
ls1.getname();
ls4.getname();
system("pause");     //控制台暂停
return 0;

}
ls1.setwork((char*)"麻冲"); 即使工作改了,ls2的工作也不会改变,因为已经做做了深拷贝处理

http://www.rkmt.cn/news/4097.html

相关文章:

  • 【笔记】类欧几里得算法
  • AQS的一些思考
  • 2 模型评估与选择
  • qoj #8557. Goldberg Machine 题解
  • 『随笔』我的唱歌练习史
  • GitHub Copilot 2025年8月最新更新!
  • 完整教程:计算机毕设 java 多媒体教室管理系统 基于 Java+SSM 的多媒体教室运维平台 Java+MySQL 的教室预约与设备管理系统
  • TCL t508n 关闭电话语音王提醒/改用4G
  • 天地图的带洞多边形操作
  • Kuby免疫学读书笔记01——造血干细胞
  • 动态规划和马尔可夫决策对比
  • 20250913 之所思 - 人生如梦
  • 动态规划
  • 马尔可夫决策
  • C语言学习
  • 《Python数据结构与算法分析》第二弹《2.2.2 异序词检测示例》
  • dfs序基础+树上差分
  • PKU_Compiler
  • 如何绕过谷歌反爬策略爬取搜索结果
  • Rust 生命周期详解 - 实践
  • 笔记《机器人动力学理论及其应用》上交桂凯博士-中科深谷机器人大讲堂第10期
  • [豪の学习笔记] 软考中级备考 基础复习#9
  • 2025CCPC南昌邀请赛游记
  • 软件工程第二次作业-个人项目
  • 2025年API安全建设方案最佳实践:七步五方法
  • Redis为什么适合做分布式锁? - 浪矢
  • 2024年以来,数学领域已有多位在国外顶尖高校取得终身教职的学者回国
  • form表单和表单控件
  • form表单
  • 【Zotero7】使用Attanger和百度同步空间如何进行同步?