1.函数隐藏:派生类中函数名字与基类的成员函数名字相同时,派生类的成员函数会屏蔽基类中同名的成员函数。
派生类中的成员变量与基类的成员变量同名时,派生类中的成员变量会屏蔽基类中同名的成员变量(如果要使用的话要加作用域)
通过派生类对象,指针,引用,访问基类中被隐藏的成员变量时要加作用域。“基类名::”
函数重写:派生类中函数名字,函数返回值,函数参数和基类中的函数名字函数返回值函数参数相同时,则基类的成员函数被隐藏,被隐藏了是被访问不到,而不是不存在。重写是隐藏中的一种。
函数重载:函数名字相同,参数不同或者返回值类型不同。
2.通过派生类对象,指针,或者引用访问基类中被隐藏的成员时,要在成员前面加 “基类名::“
class base
{
public:
int x;
void show();
void show(int x);
};
class child :public base
{
public:
string x;
int show(string name);
void show(int x); //函数重写
//在child类中有6个函数,包括继承基类的。
}
调用:
child.x="小明"; //访问的派生类的,基类的被隐藏。
child base::x=4; //访问的基类的,加了基类的作用域。
child.x=1234;//错误:没加作用域,访问的是派生类的,类型错误。
child.show("wgr");//访问的是child;
child.base::show();//访问的是基类
chlid.base::show(23)//访问的是基类。
child.show(23);//错误
child ch;
ch*p=&ch;
p->base::show();
p->base::x=23;
child &r=ch; //引用也是一样,只是给派生类取别名。
r.base::show();
例二:
使用对象的指针去访问普通函数时,.