首页 > 编程语言 > 详细

C++继承时的名字遮蔽问题

时间:2020-07-15 00:32:44      阅读:42      评论:0      收藏:0      [点我收藏+]

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

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

1.#include<iostream>
2.using namespace std;
3.
4.//基类People
5.class People{
6.public:
7.    void show();
8.protected:
9.    char *m_name;
10.    int m_age;
11.};
12.void People::show(){
13.    cout<<"嗨,大家好,我叫"<<m_name<<",今年"<<m_age<<"岁"<<endl;
14.}
15.
16.//派生类Student
17.class Student: public People{
18.public:
19.    Student(char *name, int age, float score);
20.public:
21.    void show();  //遮蔽基类的show()
22.private:
23.    float m_score;
24.};
25.Student::Student(char *name, int age, float score){
26.    m_name = name;
27.    m_age = age;
28.    m_score = score;
29.}
30.void Student::show(){
31.    cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
32.}
33.
34.int main(){
35.    Student stu("小明", 16, 90.5);
36.    //使用的是派生类新增的成员函数,而不是从基类继承的
37.    stu.show();
38.    //使用的是从基类继承来的成员函数
39.    stu.People::show();
40.
41.    return 0;
42.}

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

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

C++继承时的名字遮蔽问题

原文:https://www.cnblogs.com/Acapplella/p/13301877.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!