1、类
在C++语言中是一种数据类型,用于描述某一个类的事物,包括属性与方法(函数)。
例子:
2、对象
具体化某一个事物,成为一个具体的个体,创建对象后才会分配内存空间。
创建方式
3、访问属性方法
(1)<对象名>.<属性或方法>;
(2)<对象指针名> -> <属性或方法>;
4、访问权限
共有的,私有的,受保护的——在访问权限中体现不出来他们的差别,在继承中才体现出不同。
例子:判断一个点是否在圆上,圆内,圆外
过程解析:
点的头文件,定义点的参数
对点类进行封装
对圆类参数进行定义
对圆类进行封装并对点和圆的的位置关系进行判断
主函数
5、构造函数
在构造对象时自动调用此函数,往往用来初始化对象内的成员变量。
(1)定义:函数名与类名一致且没有返回值
(2)默认构造函数
当类中没有构造函数时,编译器会自动生成一个构造函数。
(3)函数重载
针对不同的初始化方式,可以构造重载函数。
(4)初始化列表
在初始化时,也可以使用初始化列表的方式来实现构造函数,一般用在继承中。
(1)拷贝构造函数
当一个对象需要通过另一个对象初始化,则需要使用拷贝构造函数。
什么时候会调用拷贝构造函数?
①主动创建对象时,用一个对象去初始化另外一个对象的时候。
②一个对象以值传递的形式传入函数体。
③一个对象以值的形式从函数返回。
C++标准允许一种(编译器)实现省略创建一个只是为了初始化另一个同类型对象的临时对象。指定这个参数(-fno-elide-constructors)将关闭这种优化。——优化方式是建立一个对象引用绑定到返回值的优化,可以省略两次调用拷贝构造函数。
深拷贝与浅拷贝
(1)浅拷贝
默认的拷贝构造函数为浅拷贝。
针对指针对象,只拷贝指针存储的地址。
(2)深拷贝
针对指针对象,拷贝指针指向的空间。
Explicit
含义:
explicit关键字只能用来修饰类的构造函数,且最好只修饰只有一个参数的构造函数。
被修饰的构造函数不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
何时触发隐式拷贝构造函数?
例子:1未添加explicit
例子2:添加explicit
6、析构函数
在销毁对象时自动调用此函数,往往用来释放对象内申请的资源。
定义:
与类名相同,在前面加位取反符~。且不能有任何参数与返回值。
特点:
①没有参数没有返回值,但有this指针
②析构函数不能用const修饰
③一个类有且只有一个析构函数,所以肯定不能重载。
7、Static
Static表示静态关键字,可以用于修饰成员变量与成员函数。
静态成员可以通过双冒号来使用。即:<类名>::<静态成员名>
(1)修饰成员变量名
语法:
①在class中进行声明——static<类型修饰符><变量名>
②在class外进行初始化——static <类型修饰符><类名>::<变量名>=<初始化值>
特点:
①static修饰的成员变量属于类不属于具体的对象
②static成员变量的内存在程序开始运行时分配,程序运行结束时释放内存。
③static成员变量对于所有的对象是共享的,并在对象创建之前就已经产生了。
④静态成员使用前必须初始化,否则会在linker(链接)步骤时出错。
⑤在成员函数中可以正常访问静态成员变量。
例子:
(2)修饰成员函数
何时使用static
一切不需要实例化(创建对象)就可以有确定行为方式的函数都应该设计成静态的。
8、this指针
用于保护对象的地址,每一个非静态函数中都有一个隐藏参数this。
常见使用方式:
在非静态函数中,需要返回对象本身。
在非静态函数中,传入形参名与对象内成员变量相同时区分两个变量。
9、const关键字
(1)const成员变量
Const成员变量只能在初始化列表中初始化
(2)const成员函数
①防止成员函数修改非静态成员变量的值。
②const成员函数可以修改静态成员变量。
③const成员函数也可以与同名非const成员函数构成函数重载。——创建const对象时调用的为const修饰的成员函数