细谈类和对象
目录
引言
写这篇文章的时候,我已经通过C++开发很久了,现在到了快实习的时候,针对我自己对于C++开发中遇到的问题,以及我自己的理解,现在通过博客来对过去的知识进行回顾和总结,如果我写的内容对你有一些帮助,那真的泰裤辣。
如果你是从上篇文章看到这里的,非常感谢你的耐性,以及感谢你对于我文章的认可。
类中的6个默认成员函数
我们知道在类中,我们可以像在外面一样定义函数,但是,C++在语法上给我们提供了六个默认的函数,当然我们也可以显示的实现。
1. 构造函数
构造build,就是构造这个类的函数,顾名思义,我们如果构造一个类呢,我们就是通过构造函数构造一个类,那么如果想要构建一个类,需要的什么呢?类,类内函数已经实现了,那么构造函数的作用就是初始化==成员变量==。
C++规定:构造函数和函数同名,并且没有返回值。
下面构造的方式,让读者理解一下:
我的成员变量加上_为了区别

后面:叫做初始化列表,最简单想到的方式是什么在Data函数的内部month_ = month, data_ = data,year_ = year , 为什么我们还有一个初始化列表呢?如果是学过Java的读者知道,Java的构造函数,就是在函数内部直接赋值,但是因为Java一切皆为引用,但是Cpp 不一样,这里看不出什么区别,我们先讲拷贝构造。后面陈述为什么要有初始化列表。
拷贝构造
拷贝构造就是通过拷贝另一个对象来给自己构造。注意,这里不一定一定是通过同一个类型的数据来拷贝,不如如果我实现,我可以通过Teacher类来给Person进行创建。拷贝构造相当于我的作业没写,但是张三写了,我把张三的抄过来了,那我不也写了吗?

细谈初始化列表

我们设计了一个DateTool类,Date类作为他的成员,为什么这里的会爆出不存在默认的构造函数 ==(不需要参数的构造函数)==这个错误,这是因为,成员变量是在初始化列表中进行的初始化,到这{}的时候,d_已经初始化完成了,这个时候d_ = d调用的是Date类的拷贝构造函数,那么我们并没有帮助d_在初始化列表中进行构造,而且Date的构造函数都是有参数的的,所有这个是报错,Date没有默认构造函数。

这样就解决了,因为d_没有默认的构造函数,不手动构造他就会构造失败。
赋值运算符重载 operator=
我没有写作业,张三写了,我可以抄他的,如果我写了,但是我乱写的,怕被老师骂,所以我把我的作业擦了,还是抄了张三的,这个就是赋值运算符重载。舍弃原来的自己,拷贝别人。

细节 : 为什么返回Date&
因为支持连等比如
a = b = c只有返回自身的引用才能支持连等。
析构函数
我们创建了一个类,那么怎么销毁呢,就是通过析构函数销毁,对于这种普通的简单数据不需要析构,只有深度数据,如果类中存储的是在堆上开辟的数组之类的数据,我们要在析构函数中进行释放,不然就会内存泄露。
运算符重载
C++支持operator + 运算符 进行函数重载,比如Date类型肯定不支持加法,但是我们可以为他自定义加法。

总结
类和对象还有很多的细节知识,比如移动拷贝,移动构造,为什么拷贝必须const但是作为一个C++初学者,了解这么多已经暂时足够了,如果想要了解更多关于C++, 可以关注我,我会只需更新。


1008

被折叠的 条评论
为什么被折叠?



