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

3.2 继承作用域准则

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

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

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

IntStack的公有接口如下所示:

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

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

  1. JavaScript——编程风格

    本篇文章我们将讨论如何将新的语法应用在编码实践当中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 所谓"编程风格",指的是编写代码的规则.不同 ...

  2. 《C++编程风格(修订版)》——1.1 抽象

    本节书摘来自异步社区出版社<C++编程风格(修订版)>一书中的第1章,第1.1节,作者:[美]Tom Cargill,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  3. 《C++编程风格(修订版)》——2.5 动态内存的一致性

    本节书摘来自异步社区出版社<C++编程风格(修订版)>一书中的第2章,第2.5节,作者:[美]Tom Cargill,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  4. [转]ECMAScript 6 入门 -编程风格

    本文转自:http://es6.ruanyifeng.com/#docs/style 编程风格 块级作用域 字符串 解构赋值 对象 数组 函数 Map结构 Class 模块 ESLint的使用 本章探 ...

  5. Google C++编程风格

    头文件 通常,每一个.cc文件(C++的源文件)都有一个对应的.h文件(头文件),也有一些例外,如单元测试代 码和叧包吨main()的.cc文件. 正确使用头文件可令代码在可诺性.文件大小和性能上大为 ...

  6. Gogole C++ 编程风格(二)

    七.命名约定 最重要的一致性规则是命名管理. 命名的风格能让我们在不需要去查找类型声明的条件下快速地了解某个名字代表的含义: 类型, 变量, 函数, 常量, 宏, 等等, 甚至. 我们大脑中的模式匹配 ...

  7. Google C++编程风格整理(二)

    5.其他 C++ 特性 5.1. 引用参数 Tip 所以按引用传递的参数必须加上 const. 定义: 在 C 语言中, 如果函数需要修改变量的值, 参数必须为指针, 如 int foo(int *p ...

  8. 腾讯华为等企业c/c++/java编程风格 及个人编码模板

    一.在程序的版式上 1.程序块要采用缩进风格编写 ,缩进的空格数为 4 个. 原因说明: 由开发工具自动生成的代码可能不一致,但如果开发工具可以配置,则应该统一配 置缩进为 4 个空格. 2.缩进或者 ...

  9. Gogole C++ 编程风格(一)

    目的: 便于他人阅读代码,记录Gogole C++ 编程风格笔记 一.头文件 1.1.Self-contained 头文件 Tip: 所有的头文件都应该使用#define来防止头文件被多重包含,命名格 ...

最新文章

  1. 【Java Web后台实验与开发】关于SSH框架的探索
  2. (转)Engineering Productivity
  3. LeetCode: Convert Sorted Array to Binary Search Tree 解题报告
  4. 关于网站根目录下面robots.txt文件的作用
  5. Quartz.net官方开发指南 第九课: JobStore
  6. LOJ bitset+分块 大内存毒瘤题
  7. 视频专辑:Hibernate 视频
  8. 计算机应用基础教程2015答案,《计算机应用基础教程(2015版)》_课后题答案.doc
  9. 网络 网络层 | IP协议、网段划分、公网与私网、路由选择
  10. mysql数据库命令_新手入门MYSQL数据库命令大全
  11. ORACLE创建表空间、用户语句
  12. java ajax框架_ajax框架之 zk -demo1
  13. Scala学习数组/映射/元组
  14. java接口自动化测试框架搭建
  15. 【gigabyte】开机循环进入技嘉主板界面、BIOS功能识别不出硬盘
  16. ElasticJob
  17. 解决 The file will have its original line endings in your working directory
  18. 阿里云企业实名认证教程
  19. Kinect for Windows SDK v2.0 开发笔记 (十三) 高清面部帧(4) 面部模型构建器
  20. 关于两个模块同时使用Arduino Mega硬串口问题

热门文章

  1. Google Chrome 调试JS简单教程[更新]
  2. 如何解压缩.7z 001,.7z002....
  3. Mysql 简介和创建新的数据库
  4. Ajax(2)--Ajax核心工作机制 你忘记了吗?
  5. Java集合框架——概述
  6. 大数据_Flink_数据处理_命令行提交Job---Flink工作笔记0014
  7. Table_Vue table 表格中显示内容过长显示省略号_并且显示提示---SpringCloud Alibaba_若依微服务框架改造_前端ElementUI---工作笔记010
  8. Component template should contain exactly one root element---基于Vue的uniapp手机端_前端UI_uview工作笔记002
  9. ES6新特性_ES6函数参数的默认值设置---JavaScript_ECMAScript_ES6-ES11新特性工作笔记011
  10. c++工作笔记001---c++相关零碎要点_endl、“\n”和‘\n’区别_extern int a关键字_-的意思_::的意思_指针和引用的区别