类的基本知识
- 类内的函数默认为内联函数,前提是符合内联函数的条件。如果不符合条件无论是否定义了inline都不会作为内联函数实现,也不会给出报错。
- 在普通的函数中声明内联函数,如果不符合条件无论是否定义了inline都不会作为内联函数实现,也不会给出报错。
- 成员函数默认是内联的,所以在声明时写不写都行。所以内联函数前并不都是有inline的
抽象
抽象:面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象的公有性质并加以描述的过程。
包括:数据抽象和行为抽象(即功能抽象和代码抽象)封装
封装:将抽象得到的数据和行为(或功能)相结合,形成一个有机整体,也就是将数据与操作数据的函数代码进行有机的结合,形成”类”,其中的数据和函数都是类的成员。
public、private、protected指定了成员的不同访问权限,public为类提供了外部接口。类成员的访问控制
public:
定义了类的外部接口。在类外只能访问类的公有成员。
private:
私有成员只能被本类的成员函数访问,来自类外部的任何访问都是非法的。
如果私有成员紧接着类的名称,则关键字private可以省略。1
2
3
4
5
6
7
8class A{
int x,y;//私有类型
public :
getx(){
return x;
}
};
protected:
protected的性质和private的性质类似,其差别在于继承过程中产生的新类影响不同。(具体的不同在下面的继承方式部分分析)
对象
- 类的对象是该类的一个实体(也称实例)
- 对象所占据的内存空间只是用于存放数据成员,函数成员不在每一个对象中存储副本,每个函数的代码在内存中值占据一份空间。
类的成员函数
函数原型写在类内,函数在类外实现时,语法为:1
2
3返回值类型 类名::函数成员名(参数表){
函数体
}
带默认形参值的函数成员:
类的默认形参值要在类内定义,其调用规则和普通函数相同。
构造函数
- 在定义对象的时候进行的数据成员设置,称为对象的初始化。
- 在新对象出现时,调用构造函数。
- 构造函数可以重载,不唯一
析构函数
- 析构函数唯一
- 构造函数的严格逆
拷贝构造函数
- 只能是唯一的
- 执行的时机:
当用一个类的对象去初始化另一个对象时。
如果函数的形参值是类的对象,调用函数时,进行形参和实参的结合时
如果函数的返回值是类的对象,函数执行完成返回调用者时。
浅拷贝
深拷贝
内嵌对象
构造函数的执行顺序: