随笔 - 9  文章 - 0  评论 - 0  阅读 - 659

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   俊男  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示