#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; }运行结果:
#include<iostream> using namespace std; //基类Base class Base{ public: void func(); void func(int); }; void Base::func(){ cout<<"Base::func()"<<endl; } void Base::func(int a){ cout<<"Base::func(int)"<<endl; } //派生类Derived class Derived: public Base{ public: void func(char *); void func(bool); }; void Derived::func(char *str){ cout<<"Derived::func(char *)"<<endl; } void Derived::func(bool is){ cout<<"Derived::func(bool)"<<endl; } int main(){ Derived d; d.func("task.lmcjl.com"); d.func(true); d.func(); //compile error d.func(10); //compile error d.Base::func(); d.Base::func(100); return 0; }本例中,Base 类的
func()
、func(int)
和 Derived 类的func(char *)
、func(bool)
四个成员函数的名字相同,参数列表不同,它们看似构成了重载,能够通过对象 d 访问所有的函数,实则不然,Derive 类的 func 遮蔽了 Base 类的 func,导致第 26、27 行代码没有匹配的函数,所以调用失败。
本文链接:http://task.lmcjl.com/news/8538.html