1、构造函数/默认构造函数:关于怎样去初始化一个对象的问题,也就是一个新的数据类型怎样去填充它的内容,需要考虑是否需要是explicit还是implicit强调,一般建议explicit来强调,因为存在隐式类型转换总是让人不太放心。需要考虑的细节很多,有默认参数的值设计,数据成员初始化列表等等。。。实例化一个对象也就是运行了一次相应的构造函数,保证实例化之后的对象的数据成员的内容可控总是好的。
class A
{
A();
A(X _x, Y _y):x(_x),y(_y){ }
//...
private:
X x;
Y y;
//...
};
2、拷贝构造函数/赋值函数:这里涉及到的思考是怎样准确复制一个对象的问题。尤其是在类当中有指针指向自由空间的资源(堆空间)的时候,这个时候更加不能依赖于由编译器默认产生的拷贝构造函数/赋值函数,因为默认的情况是按对象的成员逐个复制的,往往会涉及到析构函数多次析构同一资源,造成的结果是未定义的!又比如智能指针的所有权的转移的问题,甚至会出现了业务逻辑错乱的陷阱。
一般形式是:
class A
{
A(const A& rhs);//拷贝构造函数
A & operator=(const A& rhs);//赋值函数
//...
};
这个时候,需要做的就是要头脑清醒,为这些复制操作定义自己认为最适合的任何意义。一般来讲,拷贝构造函数和赋值函数是不一样的,根本原因就是。拷贝构造函数是去完成对未初始化的存储区的初始化,而赋值函数是去正确处理一个结构良好的对象。通常情况下,可以对赋值函数做一些优化,策略是:防止自赋值,删除那些旧资源,复制新数据。通常每个非静态成员都必须复制。
3、析构函数:C++程序员第一要学会的事情就是要学会照顾好自己的程序!首先就是要管理好申请的资源,承诺自己回收不再使用的资源,C++对象模型,或者管理自定义数据类型资源的一个关键的模型就是析构函数,编译器保证在对象的生命期结束的时候执行该对象的析构函数(如果没有明确定义,那么就帮你生成一个),这是一个语言机制
!要么乖乖按规则办事,要么自己负责后果。析构函数可以认为她是酒店打扫卫生的阿姨,当你在酒店房间里开完激情的party之后,你需要有人来帮你清理这一切,对吧?否则退房之后不管不顾,那不情况一团糟吗?所以承诺你设计的一个良好的类,一定要有一个对应的释放资源的机制,关键之一是析构函数。
class A
{
virtual ~A();
};
分享到:
相关推荐
用c++设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求多个个三角形对象的面积之和。
一个用C++编写的雇员类,里面用到了大部分的C++知识点,是一个综合程序。
用c++编写一个程序,设计一个点类Point,求两个点之间的距离。
设计一个立方体类Box,它能计算并输出立方体的体积和表面积,并编写main函数测试该类。 其中Box类包含三个私有数据成员a(立方体边长)、volume(体积)和area(表面积),另有两个构造函数以及seta()(设置立方体边长)、...
国防科技大学大一年级,程序设计(c、c++)课程作业一。实现一个类模板 象征性地收取积分
C++,C 包含类两个类互相调用彼此的类成员变量和方法,里面介绍了如何在头文件中创建相互的类对象,简单易懂
简单的c++复数类设计,适合c++初学者
c++ 类的互相调用的方法,是今天弄明白的,这里提供例子和说明给大家参考,从而告诉大家C++中类与类之间的关系,是不能烂用乱用的.希望能给大家启发.
用C++编写的一个功能强大,全面的有理数类。
C++程序设计 Complex复数类 直角坐标系 包括复数间的加、减、乘、除,还有两个复数间的夹角
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
用c++设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,如一日期加上天数、一日期减去天数、两日期相差的天数等。
C++课程设计 模拟电信计费 沈阳工程学院 源代码
用c++设计一个Complex复数类,重载运算符“+”、“-”,并设计测试程序。
C++简单程序设计图书管理系统 C++简单程序设计图书管理系统 前段时间自己写的一个小的图书管理系统,分享一下,高手就别看了....
c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现
C++设计模式设计模式(类设计之精华)C++设计模式设计模式(类设计之精华)C++设计模式设计模式(类设计之精华)C++设计模式设计模式(类设计之精华)
这是我最近做的c++课程设计,前段时间也上传过一个网上购书系统的程序,不过那是C 和c++一起写的。这次完全是用c++编写,用类 链表 文件流写的、、更重要的是里面有一份本人写了3天3夜的课程设计报告,很具体、很...
C++DLL中包含一个类,C#端要调用这个类的函数,重新封装这个类,来供C#端调用
设计并实现一个设计并实现一个工资管理系统,其中有三类人员:经理、技术人员、推销人员。他们的月薪分别为:经理:8000元/月;技术人员:100元/小时;推销人员:销售额4%提成。人员基本信息包括:姓名、个人编号、...