C++知识9——继承

类的基本知识

  • 类内的函数默认为内联函数,前提是符合内联函数的条件。如果不符合条件无论是否定义了inline都不会作为内联函数实现,也不会给出报错。
  • 在普通的函数中声明内联函数,如果不符合条件无论是否定义了inline都不会作为内联函数实现,也不会给出报错。
  • 成员函数默认是内联的,所以在声明时写不写都行。所以内联函数前并不都是有inline的

    抽象

    抽象:面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象的公有性质并加以描述的过程。
    包括:数据抽象和行为抽象(即功能抽象和代码抽象)

    封装

    封装:将抽象得到的数据和行为(或功能)相结合,形成一个有机整体,也就是将数据与操作数据的函数代码进行有机的结合,形成”类”,其中的数据和函数都是类的成员。
    public、private、protected指定了成员的不同访问权限,public为类提供了外部接口。

    类成员的访问控制

    public:
    定义了类的外部接口。在类外只能访问类的公有成员。
    private:
    私有成员只能被本类的成员函数访问,来自类外部的任何访问都是非法的。
    如果私有成员紧接着类的名称,则关键字private可以省略。
    1
    2
    3
    4
    5
    6
    7
    8
    class A{
    int x,y;//私有类型
    public :
    getx(){
    return x;
    }

    };

protected:
protected的性质和private的性质类似,其差别在于继承过程中产生的新类影响不同。(具体的不同在下面的继承方式部分分析)

对象

  • 类的对象是该类的一个实体(也称实例)
  • 对象所占据的内存空间只是用于存放数据成员,函数成员不在每一个对象中存储副本,每个函数的代码在内存中值占据一份空间。

类的成员函数

函数原型写在类内,函数在类外实现时,语法为:

1
2
3
返回值类型 类名::函数成员名(参数表){
函数体
}

带默认形参值的函数成员:
类的默认形参值要在类内定义,其调用规则和普通函数相同。

构造函数

  • 在定义对象的时候进行的数据成员设置,称为对象的初始化。
  • 在新对象出现时,调用构造函数。
  • 构造函数可以重载,不唯一

析构函数

  • 析构函数唯一
  • 构造函数的严格逆

拷贝构造函数

  • 只能是唯一的
  • 执行的时机:
    当用一个类的对象去初始化另一个对象时。
    如果函数的形参值是类的对象,调用函数时,进行形参和实参的结合时
    如果函数的返回值是类的对象,函数执行完成返回调用者时。

浅拷贝

深拷贝

内嵌对象

构造函数的执行顺序:

继承方式

point:用到拷贝构造的时机