📜  C ++ |继承|问题12(1)

📅  最后修改于: 2023-12-03 15:13:45.266000             🧑  作者: Mango

C++ | 继承 | 问题12

概述

继承是C++中面向对象编程的重要特性之一,它可以让一个类继承另一个类的属性和方法。子类可以拥有父类的所有成员函数和成员变量,并且还可以定义自己的成员函数和成员变量。通过继承可以实现代码的重用和多态性,提高代码的可读性和可维护性。

继承方式

C++中继承有三种方式:

  • 公有继承(public inheritance)
  • 私有继承(private inheritance)
  • 保护继承(protected inheritance)
公有继承

公有继承的形式为:

class Derived:public Base{
    // other members
};

在公有继承的情况下,从基类继承的成员在子类中是public的,可以被子类成员函数和外部函数调用。

私有继承

私有继承的形式为:

class Derived:private Base{
    // other members
};

在私有继承的情况下,从基类继承的成员在子类中是private的,只能被子类成员函数调用,不能被外部函数调用,也不能被子类对象调用。

保护继承

保护继承的形式为:

class Derived:protected Base{
    // other members
};

在保护继承的情况下,从基类继承的成员在子类和子类的子类中都是protected的,只能被子类成员函数调用,不能被外部函数调用,也不能被子类对象调用。

继承关系

在C++中,每个类都有一个基类(父类),除了根类Object之外。如果类A继承类B,则B是A的基类,A是B的派生类。可以形成多层继承关系,即类C继承自类B,类B继承自类A,类A继承自Object。

多重继承

多重继承是指一个类继承多个基类。例如:

class Derived:public Base1,public Base2{
    // other members
};

在多重继承的情况下,派生类会继承多个基类的成员函数和成员变量。需要注意的是,如果多个基类中有同名的成员函数或成员变量,在派生类中需要用作用域限定符来加以区分。例如:

class Base1{
public:
    void func1(){}
};

class Base2{
public:
    void func1(){}
};

class Derived:public Base1,public Base2{
public:
    void func(){
        Base1::func1(); // 调用Base1的func1函数
        Base2::func1(); // 调用Base2的func1函数
    }
};
虚函数

虚函数是允许在派生类中重新定义的基类成员函数。定义虚函数的语法如下:

class Base{
public:
    virtual void func(){};
};

class Derived:public Base{
public:
    void func() override { // 使用override关键字覆盖基类的func函数
        // 派生类的实现
    }
};

通过使用虚函数,可以实现运行时多态性(Runtime Polymorphism)。在调用虚函数时,会根据对象的实际类型来调用相应的函数,而不是根据指针或引用的类型来调用函数。

纯虚函数

纯虚函数是没有函数体的虚函数,定义纯虚函数的语法如下:

class Base{
public:
    virtual void func()=0; // 纯虚函数
};

一个类中如果有纯虚函数,就称为抽象类,抽象类不能被实例化,只能被用作基类来派生新的类。派生类必须实现基类中的所有纯虚函数才能被实例化。

总结

本文介绍了C++中继承的三种方式,派生类和基类的关系,多重继承,虚函数,以及纯虚函数和抽象类。掌握继承的概念和用法,可以实现代码的复用和多态性,提高开发效率和代码质量。