《C++编程风格(修订版)》——3.2 继承作用域准则

简介:

本节书摘来自异步社区出版社《C++编程风格(修订版)》一书中的第3章,第3.2节,作者:【美】Tom Cargill,更多章节内容可以访问云栖社区“异步社区”公众号查看。

3.2 继承作用域准则

C++编程风格(修订版)
基类Stack的公有接口如下所示:
image

在派生类中,我们可以看到和基类成员函数有着同样名字的成员函数。注意,其中的Stack::pop()和Stack::push()都不是虚函数。同时,我们还注意到,派生类成员函数中的参数类型与相应的基类成员函数中的参数类型并不匹配。例如,Stack::push()不带参数,而IntStack::push()的参数是一个整数。对于这样的函数,根据C++作用域准则,这就意味着派生类的成员函数将隐藏基类的成员函数,因为在派生类中引入了新的作用域级别。在下面的示例代码中我们可以看到作用域准则的效果。

image

成员函数f并不是被重载。由于在派生类中定义了一个函数f,因此表达式d.f(1.5)所调用的函数就一定是派生类中的函数f。而表达式d.g(1.5)调用的则是基类的成员函数,这是因为在派生类中并没有定义成员函数g。编译器在搜索函数g的定义时,将首先在派生类中搜索,如果没有找到,那么将继续在基类中搜索。在使用派生类的对象时,我们可以只通过名字g来调用函数Base::g,但却不能简单地通过名字f来调用Base::f。

IntStack的公有接口如下所示:
image

根据在上面给出的作用域准则,我们调用的是IntStack或者CharStack对象自身的函数push()和pop(),而并非是从Stack继承而来的函数。IntStack和CharStack都继承了Stack的公有接口,但却用它们自身的函数把接口都隐藏了起来。在本章的后面部分将再次讨论这个问题。

相关文章
|
1月前
|
C++ 开发者
C++学习之继承
通过继承,C++可以实现代码重用、扩展类的功能并支持多态性。理解继承的类型、重写与重载、多重继承及其相关问题,对于掌握C++面向对象编程至关重要。希望本文能为您的C++学习和开发提供实用的指导。
60 16
|
1月前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
57 5
|
3月前
|
编译器 C++ 开发者
【C++】继承
C++中的继承是面向对象编程的核心特性之一,允许派生类继承基类的属性和方法,实现代码复用和类的层次结构。继承有三种类型:公有、私有和受保护继承,每种类型决定了派生类如何访问基类成员。此外,继承还涉及构造函数、析构函数、拷贝构造函数和赋值运算符的调用规则,以及解决多继承带来的二义性和数据冗余问题的虚拟继承。在设计类时,应谨慎选择继承和组合,以降低耦合度并提高代码的可维护性。
44 1
【C++】继承
|
4月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
115 11
|
4月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
77 1
|
4月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
67 1
|
4月前
|
安全 编译器 程序员
C++的忠实粉丝-继承的热情(1)
C++的忠实粉丝-继承的热情(1)
36 0
|
4月前
|
编译器 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
62 0
|
4月前
|
程序员 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
62 0
|
5月前
|
C++
c++继承层次结构实践
这篇文章通过多个示例代码,讲解了C++中继承层次结构的实践应用,包括多态、抽象类引用、基类调用派生类函数,以及基类指针引用派生类对象的情况,并提供了相关的参考链接。