C++单多继承与函数兼容性详解
![](https://csdnimg.cn/release/wenkucmsfe/public/img/starY.0159711c.png)
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++继承,开发者能够更好地组织和复用代码,实现面向对象编程的核心原则。
121 浏览量
257 浏览量
186 浏览量
191 浏览量
1458 浏览量
1140 浏览量
122 浏览量
点击了解资源详情
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38622227
- 粉丝: 4
最新资源
- Java基因音乐软件开发:节奏与旋律的创新结合
- PHP缩略图类库实现与应用详解
- Web前端资源压缩包:CSS和JS文件整合
- 电子科技大学电路分析课程教案解析
- Go语言开发博客后端教程:Gin框架应用指南
- 深圳市建筑楼块矢量数据包:GIS格式导出与应用
- Angular与Spring Boot整合OIDC认证实践
- CRUDr命令行工具:实现远程API操作的便捷途径
- 掌握Java7开发:官方文档与JDK API全面指南
- Vue3ElementPlus:新一代前端组件库介绍
- 3口交换机设计方案:RTL8305NB与PCB文件
- JS图片上传与取色功能实现详解
- ArcSoft ArcFace Windows X64 V1.1最新版发布
- 掌握Windows核心编程,C++源码分析指南
- Swift技术开发:高效管理通讯录 Contacts
- Java API实现企业级名称和地址数据清洗