介绍c++特性前简单介绍一下c++中的类和对象:
c==》c++:c语言中结构体:描述一类事物属性的自定义的数据类型(属性只是一类事物的一部分)
全面的描述一类事物 = 描述属性 + 描述行为
c++中类:描述一类事物的属性和行为的自定义的数据类型
属性:成员变量
行为:成员函数
对象:用类这种自定义的数据类型定义的变量,定义变量的过程叫实例化对象
访问限定符:public protected private
public:公有的,被public修饰的成员既可以在类内被访问,也可以在类外被访问
protected:受保护的,被protected修饰的成员只能在类内被访问,不能在类外被访问
private:私有的,被private修饰的成员只能在类内被访问,不能在类外被访问
c++封装特性:封装:把一类事物的属性和行为用类这种自定义的数据类型包起来,把需要隐藏的隐藏起来,把可以暴露的暴露出来
This指针:this指针:存在于类中的所有的非静态的成员函数中,是这些函数的第一个形参
指向当前类对象,谁正在调用成员函数,谁就是当前类对象
类内部的成员函数第一个形参都是 类名 *this
构造函数和析构函数: 构造函数:是实例化对象时系统自动调用给成员变量进行初始化的函数
构造函数可以自己定义,也可以使用系统提供的构造函数,当我们自己定义了构造函数时,系统就不会提供,而当我们没有自定义构造函数时,系统会提供一个无参的构造函数
构造函数的定义:
- 函数名和类名相同
- 无返回值
- 参数不限制(构造函数可以有多个,可以重载)
默认构造函数:
- 没有定义,系统提供的构造函数
- 自己定义的无参构造函数
- 自己定义的有参而且所有参数都有默认值的构造函数
注意:
- 一个类有且只有一个默认构造函数
- 如果没有定义构造函数,系统会自动提供,一旦定义了,系统就不提供了
构造函数是在对象生命周期开始的时候被调用的,在对象的生命周期结束(如果是局部的对象,就是{}结束时,如果是全局变量,就是程序结束时,如果是new的空间,就是delete时)的时候调用的就是析构函数,是系统自动调用的,如果没有定义,系统会提供
析构函数的定义:
- 函数名是~类名
- 无参数
- 无返回值
一般情况下,如果在构造函数中有new,那么就需要在析构函数中去delete
深拷贝和浅拷贝: 拷贝构造函数:参数必须为对象的引用的构造函数,没有定义时系统提供,定义了系统就不提供了
什么时候调用拷贝构造呢?
通过一个已有的对象给新实例化的对象初始化时就需要调用拷贝构造函数
拷贝构造函数定义:
- 函数名和类名相同
- 参数为const修饰的类对象的引用
- 无返回值
以上情况就需要自己定义拷贝构造函数,因为系统提供的拷贝构造函数是浅拷贝,而这种情况下需要使用深拷贝
总结:
一般情况下,不需要自己定义拷贝构造函数,使用系统提供的浅拷贝构造函数即可,但如果构造函数中有new,就需要进行深拷贝,就需要自定义拷贝构造函数,否则就会出现上图中一块空间被释放多次的情况,出现段错误
以上是本人学习过程中的笔记总结,如有错误,请读者指出,我将会积极改正。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)