C++入门——60s从0到1
多重继承
在C++中,多重继承是指一个派生类从多个基类中继承属性和行为。多重继承可以减少代码的重复,提高代码的复用性。
多重继承的声明方式
声明一个多重继承的派生类的方式如下:
class DerivedClass : public BaseClass1, public BaseClass2 {
// 成员列表
};
其中,`BaseClass1` 和 `BaseClass2` 是基类的名称。在 `:` 后列出所有基类的名称,中间用逗号分隔。
多重继承中的虚继承
在多重继承中,如果最后一个基类是虚拟继承的(使用 `virtual` 关键字),则派生类只需要保留一个基类对象的副本,而不是每个基类都保留一个副本。这可以节省内存空间。
class DerivedClass : public BaseClass1, public BaseClass2, virtual BaseClass3 {
// 成员列表
};
在上面的例子中,`BaseClass3` 是虚拟继承的。这意味着派生类只需要保留一个 `BaseClass3` 的对象副本,而不是每个基类都保留一个副本。
多重继承中的命名冲突
当多重继承的派生类继承了多个基类中有相同名称的成员时,就会发生命名冲突。在这种情况下,需要使用作用域解析符(`::`)来指定使用哪个基类的成员。
class BaseClass1 { public: void func() { std::cout << "BaseClass1::func()" << std::endl; } }; class BaseClass2 { public: void func() { std::cout << "BaseClass2::func()" << std::endl; } }; class DerivedClass : public BaseClass1, public BaseClass2 { public: void func() { // 使用作用域解析符来指定使用哪个基类的成员 BaseClass1::func(); // 调用 BaseClass1 的 func() 函数 BaseClass2::func(); // 调用 BaseClass2 的 func() 函数 } };
在上面的例子中,派生类 `DerivedClass` 同时继承了两个基类 `BaseClass1` 和 `BaseClass2`,它们都有一个名为 `func()` 的公有成员函数。为了区分这两个函数,我们需要在调用时使用作用域解析符来指定使用哪个基类的成员。