如果派生类中新增一个成员变量,该成员变量与基类中的成员变量同名,则新增的成员变量就会遮蔽从基类中继承过来的成员变量。同理,如果派生类中新增的成员函数与基类中的成员函数同名,则该新增的成员函数就会遮蔽从基类中继承过来的成员函数。
#include<iostream>
using namespace std;
class basic
{
public:
void setx(int a){x = a;}
void sety(int b){y = b;}
int getx(){return x;}
int gety(){return y;}
private:
int x;
int y;
};
class derived : public basic
{
public:
void setx(char *a){x = a;}
char* getx(){return x;}
private:
char * x;
};
int main()
{
derived d1;
d1.setx("class"); //OK
// d1.setx(50); //compile error
d1.basic::setx(50); //OK
cout << "x=" <<d1.getx() << endl;
cout << "x=" <<d1.basic::getx() << endl;
return 0;
}
x=class x=50
从上例中,我们可以看出被遮蔽了的基类的成员变量或成员函数并非是没有继承过来,而仅仅是被派生类的同名成员变量和成员函数给遮蔽了,调用的时候需要用到类名加上域解析操作符。