C++面试常见问题——11重载、覆盖、隐藏

重载、覆盖、隐藏

重载

在同一类定义的成员函数中,参数不同的同名函数为重载关系。重载与虚函数无关。

class A{
private:
	int x;
public:
	void fun(int);			//重载关系的三个函数, 
	void fun(double,double);
	virtual fun();
};

覆盖

派生类的成员函数覆盖了基类中的同名函数。参数相同且基类中的同名函数为虚函数时会覆盖。

class L{				//基类 
private:
	int x;
public:
	virtual void fun1(){cout<<"L:fun1"<<endl;}; 
	void fun1(int){cout<<"L:fun1i"<<endl;}; 
	void fun2(){cout<<"L:fun2"<<endl;};
}; 
class M:public L{
public:
	void fun1(){cout<<"M:fun1"<<endl;};		//M的fun1覆盖了L的fun1 
	void fun2(){cout<<"M:fun2"<<endl;};
	void fun1(int){cout<<"M:fun1i"<<endl;};
};

隐藏

派生类的成员函数屏蔽基类中的同名函数。

  1. 参数相同且基类同名函数不虚
  2. 参数不同
class X{
public:
	virtual x1(int){cout<<"X:x1"<<endl;};
	x2(int){cout<<"X:x2"<<endl;};
	//x2(){cout<<"X:x2"<<endl;};			同名函数都被隐藏 
};
class Y:public X{
public: 
	x1(){cout<<"Y:x1"<<endl;};		//参数不同,必为隐藏 
	x2(int){cout<<"Y:x2"<<endl;};	//参数相同,不虚隐藏 
};
posted @ 2020-02-24 00:13  MenciusYue  阅读(318)  评论(0)    收藏  举报