在继承中,如果子类新增成员和父类成员的名称相同,那么就需要辨别访问的是子类成员还是父类成员。

1、什么是作用域分辨符?

C++中,作用域分辨符由“::”表示,其作用是限定所访问成员所在的类。作用域标识符的使用语法如下:

类名

2、什么是隐藏规则?

对于具有包含关系的作用域:

  • 如果内层和外层声明了同名标识符,那么外层标识符在内层中不可见,即隐藏规则
  • 如果内层没有声明和外层同名标识符,那么外层标识符在内层可见;

根据同名隐藏规则,子类声明和父类同名的成员时,将导致父类的成员被隐藏(子类声明的同名函数和父类同名函数参数表不同也被隐藏,即重载形式也被隐藏)。此时,则需要使用作用域标识符进行限定成员所属的父类。

3、子类使用作用域标识符访问父类成员

考虑一般的情况,即子类继承自父类,父类又继承自父类,即多级继承。此时,如果子类对象想要访问任一级父类的同名成员,则需要使用作用域标识符

下面的例子中,类Z继承自类Y,类Y继承自类X,并且X、Y、Z三个类都含有同名函数成员get()和同名数据成员value:

class 

现在,如果子类Z的对象想要访问X或者Y的同名成员函数,则需要使用作用域标识符,如下:

Z 

4、使用using将一个作用域的标识符引入到另一个作用域

除去上述作用域标识符以外,子类还可以通过使用using引入父类的同名标识符。using最常用的情况是:子类新增同名函数和父类同名函数的参数不同时(即重载形式),子类对象可以直接通过参数表,告诉编译器需要访问的同名函数属于子类还是父类

class 

通过子类对象z调用get函数时,编译器根据参数形式不同,可以区分出调用的函数属于X还是属于Y。此时,get()和get(int)相当于子类重载的两个函数。

c 子类对象 访问父类对象受保护成员_C++日志(三十四)子类同名成员与作用域分辨符...相关推荐

  1. c 子类对象 访问父类对象受保护成员_面向对象三大特征: 继承

    如果子类重写了父类的方法,子类对象又要使用父类的方法怎么办 继承 今日内容 所有的类都直接或者简洁的集成到了Object Object:祖宗类 概述 要定义的类属于已有类的一种时,可以将该类定义为已有 ...

  2. c 子类对象 访问父类对象受保护成员_看了这个,你就会搞对象了

    今天我们来聊聊面向对象的一些事情. 什么是面向对象?简单的来讲,面向对象是一种程序设计的思想,一种分析和解决问题的方式.如果说世间每一个事物,都是一个独一无二的个体,那么这个个体就是一个对象--你的女 ...

  3. c 子类对象 访问父类对象受保护成员_06-JavaSe面向对象

    一.static 1.它是一种修饰符 2.使用位置:它用来修饰成员变量和成员方法 static修饰成员变量,叫类变量: static修饰成员方法,叫类方法: 类成员=类变量+类方法 没有使用stati ...

  4. c 子类对象 访问父类对象受保护成员_面向对象编程(OOP)

    这节讲一下,什么是面向对象(Object Oriented Programming).说面向对象之前,我们不得不提的是面向过程(Process Oriented Programming),C语言就是面 ...

  5. c 子类对象 访问父类对象受保护成员_java面向对象总结

    前言:文章参考<java疯狂讲义>进行总结和归纳,知识要进行输出才算真正的有用. 在java的世界里,一切皆为对象,类是对对象的抽象,来一个例子:Person类 public 有了类,就可 ...

  6. c 子类对象 访问父类对象受保护成员_面向对象的三大特征

    1.封装 封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 封装的好处: 良好的封装可以减少耦合. 类内部的实现可以自由修改. 类具有 ...

  7. C++之继承探究(五):子类对象作父类对象使用

    前文:C++之继承探究(四):继承的使用 把子类对象当作父类对象使用 分三种情况:   (1) 将子类对象赋值给父类对象.    --把等号右边的子类对象,赋值给等号左边的父类对象时,仅仅是把子类中来 ...

  8. java如何中断父类方法_java – 如何测试调用父类的受保护(不需要)方法的方法?...

    我陷入了一个非常奇怪的情况. 我有一些我需要测试的特定代码. 这里是: public class A { /* * The real method of real class is so big th ...

  9. c# 不可访问 因为它受保护级别限制

    最近开始学习c#,编了一个程序就发现问题,不可访问 因为它受保护级别限制: 具体如下: 程序: using System; using System.Collections.Generic; usin ...

最新文章

  1. apache httpd 1
  2. 【Django】安装及配置
  3. 理解 K8s 资源更新机制,从一个 OpenKruise 用户疑问开始
  4. inotify监听文件夹的变动
  5. HDU多校3 - 6975 Forgiving Matching(多项式匹配字符串)
  6. SAP Spartacus的登录页面的用户名显示逻辑
  7. 虚拟机开启以后电脑非常卡_专主开VT电脑版手机安卓模拟器开启VT 模拟器开启VT 虚拟机打开VT...
  8. SpringBoot 使用注解实现消息广播功能
  9. linux-01-linux中的一些特殊符号
  10. 查看手册命令 Oracle,ORACLE 数据库常用日常维护命令手册
  11. 最短路径算法之四——SPFA算法
  12. python核心编程;可以帮你提高Python编程效率十条建议
  13. 自动与时间服务器时间同步,Windows系统时间同步(附时间同步服务器地址)
  14. 发那科机器人编程软件fanuc roboguide授权补丁_工业机器人离线编程与应用:ROBOGUIDE V8.3版本的工程文件创建...
  15. jxbrowser 6.18 以及 6.16 破解 整合
  16. Win32开发笔记(一):整体流程
  17. mtk android 关机充电,MTK充电开机关机过程
  18. DSS部署-12、DSS安装
  19. TXT文件编码格式解析
  20. 项目管理(如何做一个优秀的项目经理)

热门文章

  1. qt中Qtableview的用法
  2. Android中的Intent和Intent-filter总结
  3. kruskal算法java_克鲁斯卡尔算法(Kruskal)的java实现
  4. java反编译工具_ReverseTool逆向工具集合
  5. android 指示器平移动画,Android实现带指示器的自动轮播式ViewPager
  6. 自旋波matlab计算,[首藏作品](4865)从电子到磁振子,自旋波计算开启新篇章...
  7. java日期格式精确到分_详解Java日期格式化及其使用例子
  8. ldap seach java_从LDAP(Java)检索信息
  9. python全栈工程师薪资-Python全栈工程师为何这么火薪资这么高看了才知道
  10. java集合刷新面板_java Swing 中 面板刷新的问题。。求指教 。 高手在哪里啊。。。...