单继承、多继承、虚继承

在C++中,继承是面向对象编程的重要概念,用于构建类层次结构,以实现代码重用和扩展功能。C++支持单继承、多继承和虚继承。下面是对这三种继承方式的详细讲解和代码示例。

单继承

单继承是指一个子类只能继承一个父类的情况。这是最简单和最常见的继承形式。

示例代码:

#include <iostream>

// 基类
class Base {
public:
    void display() {
        std::cout << "Base class display function." << std::endl;
    }
};

// 派生类
class Derived : public Base {
public:
    void show() {
        std::cout << "Derived class show function." << std::endl;
    }
};

int main() {
    Derived obj;
    obj.display(); // 调用基类方法
    obj.show();    // 调用派生类方法
    return 0;
}

3多继承

多继承是指一个子类可以继承多个父类的情况。在多继承中,子类可以访问所有父类的成员。但是多继承也带来了一些复杂性,比如命名冲突和菱形继承问题。

示例代码:

#include <iostream>

// 基类A
class BaseA {
public:
    void displayA() {
        std::cout << "BaseA class display function." << std::endl;
    }
};

// 基类B
class BaseB {
public:
    void displayB() {
        std::cout << "BaseB class display function." << std::endl;
    }
};

// 派生类
class Derived : public BaseA, public BaseB {
public:
    void show() {
        std::cout << "Derived class show function." << std::endl;
    }
};

int main() {
    Derived obj;
    obj.displayA(); // 调用BaseA的方法
    obj.displayB(); // 调用BaseB的方法
    obj.show();     // 调用派生类的方法
    return 0;
}

3虚继承

虚继承用于解决多继承中的菱形继承问题。当一个类从两个类继承,而这两个类又从同一个基类继承时,会导致子类包含两个基类实例。虚继承确保只存在一个共享的基类实例。

菱形继承问题:

#include <iostream>

// 基类
class Base {
public:
    int baseValue;
};

// 派生类A虚继承Base
class DerivedA : virtual public Base {
public:
    int derivedAValue;
};

// 派生类B虚继承Base
class DerivedB : virtual public Base {
public:
    int derivedBValue;
};

// 派生类C继承DerivedA和DerivedB
class DerivedC : public DerivedA, public DerivedB {
public:
    void show() {
        std::cout << "DerivedC class show function." << std::endl;
    }
};

int main() {
    DerivedC obj;
    obj.baseValue = 10; // 由于虚继承,只有一个Base实例
    obj.derivedAValue = 20;
    obj.derivedBValue = 30;
    
    std::cout << "Base Value: " << obj.baseValue << std::endl;
    std::cout << "DerivedA Value: " << obj.derivedAValue << std::endl;
    std::cout << "DerivedB Value: " << obj.derivedBValue << std::endl;
    obj.show();
    
    return 0;
}

在上述代码中,类DerivedA和DerivedB都虚继承了Base类,而DerivedC继承了DerivedA和DerivedB。通过虚继承,DerivedC只有一个Base类的实例,避免了菱形继承问题。

总结
单继承:子类只继承一个基类,简单且常用。
多继承:子类可以继承多个基类,但可能会带来复杂性,如命名冲突。
虚继承:用于解决多继承中的菱形继承问题,确保只有一个基类实例。
这些继承方式提供了强大的灵活性和重用性,但在使用时需要注意设计和复杂性,以避免潜在的问题。

posted @   小马同学..3  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示