C++单多继承与函数兼容性详解
5星 · 超过95%的资源 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++继承,开发者能够更好地组织和复用代码,实现面向对象编程的核心原则。
120 浏览量
245 浏览量
168 浏览量
121 浏览量
1450 浏览量
1131 浏览量
112 浏览量
点击了解资源详情
weixin_38622227
- 粉丝: 4
- 资源: 936
最新资源
- 点阵式LCD12864接口与程序设计分析
- D:\教学课件4.0\总部结业试卷\SQL 内测
- XML Schema
- Data Mining Techniques in Grid Computing Environments
- Linux命令集.pdf
- 西电汤子赢计算机操作系统教材答案(超全版)
- 用PHP与XML实现网站编程
- UBUNTU开启3D桌面教程
- eclipse.pdf
- Flex学习之配置篇-如何在Eclipse中开发Flex
- Java入门笔记.doc
- kernel methods for pattern analysis - En Edition
- UML for Java Programmers中文版.pdf
- Flex 入门经典,适合初学
- 深入了解oracle数据字典
- 思科酒店行业解决方案