C++继承时的名字遮蔽(一)
生活随笔
收集整理的這篇文章主要介紹了
C++继承时的名字遮蔽(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
兒子從父親那里繼承了一輛車,后來自己也買車了,如果開車就開自己的車,否則自己為什么買車呢
如果派生類中的成員(包括成員變量和成員函數)和基類中的成員重名,那么就會遮蔽從基類繼承過來的成員。所謂遮蔽,就是在派生類中使用該成員(包括在定義派生類時使用,也包括通過派生類對象訪問該成員)時,實際上使用的是派生類新增的成員,而不是從基類繼承來的。
下面是一個成員函數的名字遮蔽的例子:
#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++继承时的名字遮蔽(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++三种继承方式
- 下一篇: C++继承时的名字遮蔽(二)