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(有翼动物),因为蝙蝠兼具两者特征。
示例 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语言
- C# 类与对象:面向对象编程的基石
- 掌握 C# 抽象类与抽象方法:实战指南
- 理解 C# 分部类与分部方法
- 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
- C++类与对象:面向对象编程实战指南
- C++ 三种继承方式深度解析:public、protected 与 private
- C++ 友元函数与友元类:突破访问控制的利器
- C++ Struct 与 Class 核心差异、语法及最佳实践
- C++存储类别全解析:auto/register/static/extern/mutable作用域与生命周期
- C++日期时间完全指南:ctime库、tm结构体与格式化输出
- C++多态实战指南:虚函数、动态绑定与纯虚函数
- C++数据抽象实战:接口与实现分离的设计艺术