zoukankan      html  css  js  c++  java
  • C++学习16 继承时的名字遮蔽

    如果派生类中的成员变量和基类中的成员变量重名,那么就会遮蔽从基类继承过来的成员变量。所谓遮蔽,就是使用新增的成员变量,而不使用继承来的。

    成员函数也一样,如果函数名和参数签名都相同,就会造成遮蔽。如果仅仅是函数名相同,而参数签名不同,那么会构成重载。

    请看下面的例子:

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

    本例中,基类 People 和派生类 Student 都定义了 display() 函数,会造成遮蔽,stu 是 Student 类的对象,默认使用 Student 类的 display(),如第34行代码所示。

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

  • 相关阅读:
    Tomcat笔记
    HAProxy简介
    Ansible简介与实验
    DHCP&PXE&Cobbler简单实现
    Keepalived实现LVS-DR集群高可用
    Web of Science爬虫(WOS、SCI):风车WOS下载器
    梦境时分,记录梦境
    基层码农谈领导力
    企业部署 Kubernetes 的终极目标是什么
    Scrum 敏捷实践中的三大角色
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/5801805.html
Copyright © 2011-2022 走看看