C/C++培训
达内IT学院
400-996-5531
在学习C++之前,我们就用C语言实现了顺序表和链表,这是学习数据结构的基础,提前接触总是好的,在学习c++之后,我们又实现了了两次,分别是使用类实现、使用模板类实现。那么接下来我们就进入C++知识点—类的讲解。
类
说到类,我就不得不提结构体,当然不是C语言中的结构体,而是C++中的结构体,想想这两者之间的不同:C++中的结构体不仅仅可以存放数据,而且还可以存放函数,不过,我们通常喜欢使用另一个关键字——class
那么现在就再来回顾一下类的定义吧:
class ClassName
{
//……
};
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员;类中的数据称为类的属性或者类的成员数据;类中的函数称为类的方法或者成员函数。
当时在总结类的时候总结了类的留个成员函数,那么我们再来回顾一下,它们分别是:类的构造函数、析构函数、拷贝构造函数、赋值运算符 重载、取地址运算符重载、const修饰的取地址运算符重载。
那么我们重点说一下前几个:
类的构造函数:是一个特殊的成员函数,名字与类名相同,创建类类型对象时,由编译器自动调用,在对象的生命周期内只且只调用一次,以保证每个数据成员都有一个合适的初始值。
构造函数的特性:
1、函数名与类名相同。
2、没有返回值。
3、有初始化列表(可以不用)。
4、新对象被创建,由编译器自动调用,且在对象的生命期内仅调用一次。
5、构造函数可以重载,实参决定了调用那个构造函数。
6、如果没有显式定义时,编译器会提供一个默认的构造函数。
7、无参构造函数和带有缺省值得构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个。
类的析构函数:与构造函数功能相反,在对象被销毁时,由编译器自动调用,完成类的一些资源清理和汕尾工作。
析构函数的特性:
1、析构函数在类名(即构造函数名)加上字符~。
2、析构函数无参数无返回值。
3、一个类有且只有一个析构函数。若未显示定义,系统会自动生成缺省的析构函数。
4、对象生命周期结束时,C++编译系统系统自动调用析构函数。
5、注意析构函数体内并不是删除对象,而是做一些清理工作。
类的拷贝构造函数:只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为拷贝构造函数。拷贝构造函数是特殊的构造函数,创建对象时使用已存在的同类对象来进行初始化,由编译器自动调用。
在这一个模块里有一个重要的地方,那就是浅拷贝问题,这个在之前也总结过,所以大致回顾一下:
浅拷贝的问题是怎样出现的?又怎么解决这个问题呢?
浅拷贝是经过拷贝之后,两个对象公用一个内存空间,导致释放对象的时候出现内存泄漏的问题。解决的方案有三个,分别是深拷贝的普通版本和简化版本还有写时拷贝。
深拷贝和写实拷贝的方法不同:深拷贝是再开辟一段空间放置拷贝的对象,这样从根本上解决问题,没有出现两个对象共用一块内存,就不会出现内存泄露的问题;而写拷贝是通过计数器的形式来将这块内存空间的使用对象个数写出来,这样释放的时候,通过判断计数器中的数字是不是0来决定是否释放空间。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved