C++复习之(三大特性)

1.访问特性

  public:都能访问的

  protect:自己能访问,派生类能访问,内外不能访问

  private:只有自己能访问(值得注意的是,派生类会继承父类的private成员,但是不能访问)

  以上范围不包括友元,友元都可以访问

 

2.继承

  让一个类型对象获得另一个类型对象的属性和方法,这使得可以无需重新编写原来的类的代码对类的功能进行拓展(不用重复造轮子)

  三种继承方式

  

 

2.多态

  分为静态多态(函数的重载)和动态多态(派生类和虚函数)。

  动态多态简单概括就是:允许将⼦类类型的指针赋值给⽗类类型的指针。

  子类需重写父类中的虚函数,当传入什么类型的指针就调用那个类对应的函数。例子:

class Animal
{
public:
    virtual void speak()
    {cout << "动物在说话" << endl;}
};

class Cat :public Animal
{
public:
    void speak()
    {cout << "小猫在说话" << endl;}
};

class Dog :public Animal
{
public:
    void speak()
    {cout << "小狗在说话" << endl;}
};

void DoSpeak(Animal & animal)
{
    animal.speak();
}
//当传入那种类型的指针就调用对应类型的函数

  虚函数与动态多态绑定,当父类有函数想要子类定义自己版本时,就定义虚函数(关键字vritual),虚函数依赖于虚函数表工作,当父类指针指向子类时,虚函数表指针就指向子类的虚函数表,从而达到调用。

  纯虚函数和抽象类:有时父类中的虚函数实现是毫无意义的,其主要目的在于调用子类重写的类容,因此可以将其定义为纯虚函数,对应的父类又叫做抽象类,抽象类不能实例化。

语法

virtual 返回值类型 函数名 (参数列表)= 0 ;

  虚析构和纯虚析构:当类中有属性开辟到堆区是,需要利用虚构函数手动释放。但多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码,因此需要虚析构和纯虚析构,解决通过父类指针释放子类对象。

  多继承:一个子类继承多父类。

  虚继承:为了解决菱形继承问题,使用虚继承,目的在于节约空间和避免二义性。

  

 

posted on 2022-04-16 11:58  俊男  阅读(120)  评论(0)    收藏  举报