重载,隐藏,覆盖
- 重载:一组函数要重载,必须处在同一作用域下,而且函数名字相同,参数列表不同。
- 隐藏:继承结构中,派生类的同名成员,将基类的同名成员给隐藏调用了
- 覆盖:派生类中,重写了基类中的虚函数,称为覆盖
class Base
{
public:
Base(int data = 10) : ma(data) {}
void show() { cout << "Base::show()" << endl; }
void show(int) { cout << "Base:show(int)" << endl; }
protected:
int ma;
};
class Derive : public Base
{
public:
Derive(int data = 20) : Base(data), mb(data) {}
void show() { cout << "Derive::show()" << endl; }
private:
int mb;
};
int main()
{
Derive d(50);
d.show(); //
d.show(10); // 优先找的是派生类自己作用域的show方法,不会调用Base里的show方法,从而报错。可以改成show.Base::show(10);
return 0;
}
- 继承结构也被称作从上至下的结构,类型从下到上的转换是可以的,反之不可。
- 类型从上到下的转换会涉及强制类型转换,可能会导致内存的非法访问。
int main()
{
Derive d(50);
Derive* pd = &d;
Base b(20);
Base* pb = &b;
b = d; //可以
b.show(); //只能访问Base作用域下的成员变量和成员函数
//d = b; //不可
pb = &d; //可以,只能访问Base作用域下的成员变量和成员函数
//pd = &b; //不可
return 0;
}
标签:函数,作用域,成员,28,Base,重载,隐藏
From: https://www.cnblogs.com/sio2zyh/p/17987517