28重载-隐藏-覆盖

重载,隐藏,覆盖

  • 重载:一组函数要重载,必须处在同一作用域下,而且函数名字相同,参数列表不同。
  • 隐藏:继承结构中,派生类的同名成员,将基类的同名成员给隐藏调用了
  • 覆盖:派生类中,重写了基类中的虚函数,称为覆盖
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;
} 
posted @ 2024-01-25 16:44  SIo_2  阅读(18)  评论(0)    收藏  举报