儿子从父亲那里继承了一辆车,后来自己也买车了,如果开车就开自己的车,否则自己为什么买车呢

如果派生类中的成员(包括成员变量和成员函数)和基类中的成员重名,那么就会遮蔽从基类继承过来的成员。所谓遮蔽,就是在派生类中使用该成员(包括在定义派生类时使用,也包括通过派生类对象访问该成员)时,实际上使用的是派生类新增的成员,而不是从基类继承来的。

下面是一个成员函数的名字遮蔽的例子:

#include<iostream>
using namespace std;
//基类People
class People{public:void show();
protected:char *m_name;int m_age;
};
void People::show(){cout<<"嗨,大家好,我叫"<<m_name<<",今年"<<m_age<<"岁"<<endl;
}
//派生类Student
class Student: public People{public:Student(char *name, int age, float score);
public:void show();  //遮蔽基类的show()
private:float m_score;
};
Student::Student(char *name, int age, float score){m_name = name;m_age = age;m_score = score;
}
void Student::show(){cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main(){Student stu("小明", 16, 90.5);//使用的是派生类新增的成员函数,而不是从基类继承的stu.show();//使用的是从基类继承来的成员函数stu.People::show();return 0;
}

运行结果:
小明的年龄是16,成绩是90.5
嗨,大家好,我叫小明,今年16岁

本例中,基类 People 和派生类 Student 都定义了成员函数 show(),它们的名字一样,会造成遮蔽。第 37 行代码中,stu 是 Student 类的对象,默认使用 Student 类的 show() 函数。

但是,基类 People 中的 show() 函数仍然可以访问,不过要加上类名和域解析符,如第 39 行代码所示。

C++继承时的名字遮蔽(一)相关推荐

  1. C++继承时的名字遮蔽(二)

    基类成员和派生类成员的名字一样时会造成遮蔽,这句话对于成员变量很好理解,对于成员函数要引起注意,不管函数的参数如何,只要名字一样就会造成遮蔽.换句话说,基类成员函数和派生类成员函数不会构成重载,如果派 ...

  2. C++继承时名字的遮蔽

    如果派生类中的成员(包括成员变量和成员函数)和基类中的成员重名,那么就会遮蔽从基类继承过来的成员.所谓遮蔽,就是在派生类中使用该成员(包括在定义派生类时使用,也包括通过派生类对象访问该成员)时,实际上 ...

  3. Java继承时构造函数的关系

    Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...

  4. C++虚继承时的构造函数

    在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数.对最终的派生类来说,虚基类是间接基类,而不是直接基类.这跟普通继承不同,在普通继承中,派生类构造函 ...

  5. C++多继承时的对象内存模型

    #include <cstdio> #include <iostream> using namespace std; //基类A class A{ public:A(int a ...

  6. c++远征之继承篇——多重继承,多继承,虚继承,多继承时的重复定义解决方法

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.多重继承 (1)概念理解 2.多继承 (1)概念理解 3.虚继承 (1)问题的引出:多重继承和多继承的结合,造成数据的冗余.     (2)解 ...

  7. C++继承时的一些细节知识点

    编译器只有在一个类中没有一个构造函数的时候自动生成默认构造函数,当类中有任何一个类的时候,系统便不会再生成默认构造函数. 基类的成员变量在派生类中不可直接访问,但可以以间接访问,例如通过调用基类的成员 ...

  8. C++ 论公有继承时纯虚函数、虚函数、普通函数的行为表现及虚函数的重写(深度好文)

    文章目录 1 公有继承时三种类型的函数行为 1.1 纯虚函数 (pure virtual) 1.2 普通虚函数 **1.2.1 方法一** **1.2.2 方法二** 1.3 非虚函数 2 重写 (o ...

  9. python3 多继承时,父类有相同一个函数的选择

    class People:name = ''age = 0__weight = 0def __init__(self, name, age, weight):print("People 初始 ...

最新文章

  1. php负载均衡原理_Java开发大型互联网架构深入负载均衡原理之方案分析
  2. SuperCMS 上传漏洞!
  3. 权重可以当做概率幅吗?---用神经网络的收敛模拟机械波的波动
  4. python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]
  5. ASP.NET MVC 3.0学习系列文章--Razor and ASP.NET MVC 3.0
  6. 李洪强漫谈iOS开发[C语言-025]-赋值运算符案例
  7. python表达式3and5_python3 中 and 和 or 运算规律
  8. oracle性能优化求生指南_Vue项目性能优化--实践指南,网上最全最详细
  9. nlp自然语言处理_NLP自然语言处理基础
  10. easydarwin 安装_EasyDarwin HLS直播详细配置指南
  11. MFC 获取编辑框内容
  12. 小米设备打开了开发者选项和USB调试仍然无法安装成功的问题
  13. 软件工程实践者的思想
  14. Tomcat优化方案
  15. 无法登陆github的解决方法
  16. ACM论文字体及透明度的问题
  17. King of Glory刷金币脚本
  18. 京东华为P20手机评论数据抓取
  19. UE4-网格物件,比如窗户屏风栅格,出现频闪的解决
  20. MySQL海量数据存储与优化(上)

热门文章

  1. 基于FPGA的LED点阵系统开发
  2. Linux /etc/profile文件详解
  3. Failed to install VS Code update.
  4. 11.18-11.19总结(transform,transition,媒体查询,弹性盒子)
  5. Servlet3.1规范翻译 - 应用生命周期事件
  6. 9月14日学习内容整理:初识别面向对象
  7. JQuery 获取节点
  8. Debian中编译内核
  9. 使用8位字节的编码格式将字节流安全的转换成String
  10. 瑞士的迷人风光(转)