C++单多继承与函数兼容性详解

5星 · 超过95%的资源 2 下载量 62 浏览量 更新于2024-09-01 收藏 59KB PDF 举报
C++继承是面向对象编程中的重要概念,它允许一个类(子类或派生类)继承另一个类(基类)的属性和行为。C++支持两种类型的继承:单一继承和多重继承。单一继承是指一个派生类只从一个基类继承,而多重继承则允许一个派生类同时从多个基类继承。 在C++中,继承方式分为public、protected和private三种访问级别。- public继承使得派生类可以直接访问基类的公有(public)和保护(protected)成员,而私有(private)成员仅在基类内部可见。- protected继承则限制了基类私有成员的访问,只对派生类及其子类开放。- private继承使得基类的所有成员都变为私有的,派生类仅能通过基类的公共接口访问。 虚拟继承(virtual inheritance)在多重继承时引入,解决了钻石问题,即基类中有共享的基类导致的循环依赖。非虚拟继承则默认处理这种循环,可能导致数据冗余。 成员函数的继承可以选择性地为virtual,这意味着子类可以重写基类的同名函数,形成多态性。纯虚函数(pure virtual function)是一个没有实现的函数,声明为virtual且没有body,强制派生类必须实现,用来创建抽象类。 以下是一个实例代码,展示了public继承和函数参数类型的使用: ```cpp class base { public: base() : baseName(""), baseData(0) {} base(std::string bn, int bd) : baseName(bn), baseData(bd) {} std::string getBaseName() const { return baseName; } int getBaseData() const { return baseData; } private: std::string baseName; int baseData; }; class derived : public base { public: derived() : base(), derivedName("") {} derived(std::string bn, int bd, std::string dn) : base(bn, bd), derivedName(dn) {} std::string getDerivedName() const { return derivedName; } private: std::string derivedName; }; // 函数show的例子,说明不同类型的形参如何影响调用 void show(std::string& info, const base& b) { info.append("Name is "); info.append(b.getBaseName()); } void show Derived(std::string& info, derived& d) { info.append(", Derived Name is "); info.append(d.getDerivedName()); } int main() { derived derivedObj("DerivedName", 123, "Derived Value"); // 成功调用,因为派生类对象可以被基类引用 show("Base Object:", derivedObj); // 无法直接调用,因为基类函数参数不能接收派生类对象 // show(derivedObj, derivedObj.getDerivedName()); // 错误:无法将派生类对象转换为基类引用 return 0; } ``` 这段代码演示了如何通过基类的引用调用基类的函数,以及如何在设计接口时考虑参数类型,以确保兼容性和灵活性。通过理解和运用C++继承,开发者能够更好地组织和复用代码,实现面向对象编程的核心原则。