当前位置 : 主页 > 网络编程 > 其它编程 >

开发笔记:独家|如何给两个儿子合理分房产

来源:互联网 收集:自由互联 发布时间:2023-07-02
本文由编程笔记#自由互联小编为大家整理,主要介绍了独家|如何给两个儿子合理分房产?C++会告诉你答案相关的知识,希望对你有一定的参考价值。 本文由编程笔记#自由互联小编为大
本文由编程笔记#自由互联小编为大家整理,主要介绍了独家|如何给两个儿子合理分房产?C++会告诉你答案相关的知识,希望对你有一定的参考价值。 本文由编程笔记#自由互联小编为大家整理,主要介绍了独家 | 如何给两个儿子合理分房产?C++会告诉你答案相关的知识,希望对你有一定的参考价值。

传智教育院校邦

全面服务、资源分享、学习交流

初学C++时,深拷贝与浅拷贝绝对是一个理解上的麻花团,鉴于很多老师跟自由互联小编反馈,在教学过程中很多学生经常混淆这两个概念。今天呢,自由互联小编就专门写一写C++中的深拷贝与浅拷贝,便于老师们跟学生举例讲解。

独家 | 如何给两个儿子合理分房产?C++会告诉你答案

1

浅拷贝

首先我们来看一下浅拷贝,所谓浅拷贝呢,顾名思义就是拷贝的比较浅,这个“浅”字怎么理解呢,下面先举个“栗子”。

比如,一户人家有两个儿子,两个儿子要结婚,那首先呢大儿子先结婚,结婚先得买房子呀,那买了房子给大儿子成了家,接着就是小儿子结婚,小儿子结婚,一应规格按照大儿子操办,但是问题来了,没钱买第二套房子,就让小儿子与大儿子共用一套房子,那这到最后必须要干仗呀。

独家 | 如何给两个儿子合理分房产?C++会告诉你答案

这个呢,就是典型的浅拷贝,一应规格按照别人的拷贝,但不能占人家东西呀。

有这个例子,这浅拷贝呢就好理解了,来一个“官腔”说法就是,当一个类中有指针类型的数据,浅拷贝呢就是将新对象(比如小儿子)指向原有对象(比如大儿子)的内存空间(就是房子),并没有为新对象的指针成员分配新空间(不给买房独家 | 如何给两个儿子合理分房产?C++会告诉你答案),这就是浅拷贝。

下面上代码(先给大儿子买房结婚)。

#define _CRT_SECURE_NO_WARNINGS#include #include using namespace std;class Son //定义儿子类{public: Son(string name, const char* house); //声明带参构造函数 void show(); //普通成员函数 ~Son();private: string _name; //儿子的姓名 char* _house; //儿子的房子};Son::Son(string name, const char* house){ cout <<"调用构造函数,初始化儿子(为儿子准备结婚房子)" <(左右滑动即可查看完整代码)

给大儿子买房结婚,完全没有问题,不信看运行结果。

独家 | 如何给两个儿子合理分房产?C++会告诉你答案

好了,现在问题来了,小儿子也要结婚,并且结婚规格按照大儿子操办,要拷贝人家。在Son类中新增一个拷贝构造函数。

Son(const Son //拷贝构造函数

在类外实现这个拷贝构造函数。

Son::Son(const Son _name = another._name; //登记姓名(冒充大儿子) _house = another._house; //直接把大儿子房子给小儿子}

(左右滑动即可查看完整代码)

在main()函数中追加如下代码。

Son son2(son1); //直接按大儿子规格操办婚事(房子也用人家的)cout <<"son2:(小儿子也要显摆房子,看能不能显摆成)";son2.show();

(左右滑动即可查看完整代码)

这个时候就开始干仗了,拿别人的房子当自己的房子,按自己的风格再装修一遍(数据拷贝),这搁谁谁愿意。再次运行程序,程序就报异常了。

这就是浅拷贝,拷贝别人,却没有拷贝到精髓。

2

深拷贝

看完浅拷贝,那深拷贝就不难理解了,深拷贝就是给两个儿子一人买一套房子,互相独立,谁也不跟谁干仗。翻译成官方的说法就是,深拷贝就是在拷贝构造函数中完成更深层次的拷贝,当类中有指针成员时,深拷贝可以为新对象(小儿子)的指针分配一块内存空间(买房子),将数据复制到新空间(装修房子)。

要实现深拷贝就得修改拷贝构造函数,将上面拷贝构造函数修改一下,修改之后的代码如下所示。

Son::Son(const Son _name = another._name; //登记姓名(冒充大儿子) //_house = another._house; //直接把大儿子房子给小儿子 int len = strlen(another._house) + 1; //统计一下大儿子房子大小 _house = new char[len]; //给小儿子买一套同样大小的房子 strcpy(_house, another._house); //装修}

(左右滑动即可查看完整代码)

这样再运行程序,就不会报异常了。因为两个对象(两个儿子)各有独立空间(房子),就不报异常了。

总的一句话,深拷贝与浅拷贝的区别就是,深拷贝可以按照已有对象的规格为新对象分配独立的内存空间,而浅拷贝呢,只是完成了指针的拷贝,新对象与已有的对象共有一块内存空间。

当类中没有指针类型的成员变量时,浅拷贝就可以解决所有拷贝问题,但当类中有指针类型的成员变量时,要执行拷贝操作时,必须使用深拷贝。

END

独家文章推荐(点击文字即可查看):

【文章转自防cc http://www.558idc.com/gfcdn.html 复制请保留原URL】
网友评论