亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 继承模式全解析:多重、多级与层次继承

C++ 继承模式全解析:多重、多级与层次继承

本教程通过实战代码示例,系统讲解 C++ 三种核心继承模式:多重继承、多级继承与层次继承。

继承是面向对象编程的基石,让开发者能从现有类创建新类,复用属性与行为。

下面详细探讨 C++ 中三种关键继承模式。


C++ 多级继承

多级继承中,类从另一个派生类派生,形成链式结构直到基类。

class A { /* 基类实现 */ };
class B : public A { /* B 继承自 A */ };
class C : public B { /* C 继承自 B */ };

B 继承 A,C 继承 B,形成垂直继承链。

示例 1:C++ 多级继承

#include <iostream>
using namespace std;

class A {
public:
    void display() {
        cout << "Base class content." << endl;
    }
};

class B : public A {};
class C : public B {};

int main() {
    C obj;
    obj.display();
    return 0;
}

输出

Base class content.

C 对象可调用最终基类 A 定义的 display(),因 B、C 均未重写。编译器沿继承链从最派生类向上查找。


C++ 多重继承

C++ 允许类同时继承多个基类。例如 Bat(蝙蝠)同时继承 Mammal(哺乳动物)和 WingedAnimal(有翼动物),因为蝙蝠兼具两者特征。

C++ 继承模式全解析:多重、多级与层次继承

示例 2:C++ 多重继承

#include <iostream>
using namespace std;

class Mammal {
public:
    Mammal() { cout << "Mammals can give direct birth." << endl; }
};

class WingedAnimal {
public:
    WingedAnimal() { cout << "Winged animals can flap." << endl; }
};

class Bat : public Mammal, public WingedAnimal {};

int main() {
    Bat b1;
    return 0;
}

输出

Mammals can give direct birth.
Winged animals can flap.

多重继承中的二义性消解

两个基类提供同名函数时,编译器无法决定调用哪个,导致二义性错误。

class Base1 {
public:
    void someFunction() { /* ... */ }
};

class Base2 {
public:
    void someFunction() { /* ... */ }
};

class Derived : public Base1, public Base2 {};

int main() {
    Derived obj;
    // obj.someFunction(); // 错误:二义性
}

使用作用域解析运算符指定所需基类函数:

int main() {
    Derived obj;
    obj.Base1::someFunction();  // 调用 Base1 实现
    obj.Base2::someFunction();  // 调用 Base2 实现
}

C++ 层次继承

层次继承中,多个派生类继承自单一基类。公共属性/行为封装在基类,各派生类添加特有功能。

例如:Physics、Chemistry、Biology 继承自 Science;Dog、Cat、Horse 继承自 Animal。

层次继承语法

class BaseClass { /* 基类内容 */ };
class DerivedOne : public BaseClass { /* 扩展成员 */ };
class DerivedTwo : public BaseClass { /* 扩展成员 */ };
class DerivedThree : public BaseClass { /* 扩展成员 */ };

示例 3:C++ 层次继承

// C++ 层次继承演示
#include <iostream>
using namespace std;

// 基类
class Animal {
public:
    void info() {
        cout << "I am an animal." << endl;
    }
};

// 派生类 1
class Dog : public Animal {
public:
    void bark() {
        cout << "I am a Dog. Woof woof." << endl;
    }
};

// 派生类 2
class Cat : public Animal {
public:
    void meow() {
        cout << "I am a Cat. Meow." << endl;
    }
};

int main() {
    Dog dog1;
    cout << "Dog Class:" << endl;
    dog1.info();
    dog1.bark();

    Cat cat1;
    cout << "\nCat Class:" << endl;
    cat1.info();
    cat1.meow();
    return 0;
}

输出

Dog Class:
I am an animal.
I am a Dog. Woof woof.
Cat Class:
I am an animal.
I am a Cat. Meow.

Dog 和 Cat 都继承了 Animal 的 info() 方法,各自引入特有行为。

C语言

  1. C# 类与对象:面向对象编程的基石
  2. 掌握 C# 抽象类与抽象方法:实战指南
  3. 理解 C# 分部类与分部方法
  4. 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
  5. C++类与对象:面向对象编程实战指南
  6. C++ 三种继承方式深度解析:public、protected 与 private
  7. C++ 友元函数与友元类:突破访问控制的利器
  8. C++ Struct 与 Class 核心差异、语法及最佳实践
  9. C++存储类别全解析:auto/register/static/extern/mutable作用域与生命周期
  10. C++日期时间完全指南:ctime库、tm结构体与格式化输出
  11. C++多态实战指南:虚函数、动态绑定与纯虚函数
  12. C++数据抽象实战:接口与实现分离的设计艺术