14. 函数重载,函数覆盖,函数隐藏

Posted nutshelln

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14. 函数重载,函数覆盖,函数隐藏相关的知识,希望对你有一定的参考价值。

一.函数重载

1.函数名相同,参数列表不同(个数,顺序,类型)

2.vritual关键字、调用约定和返回值不做参考

 

二.函数覆盖(子类重写的虚函数覆盖了虚表中父类的虚函数,多态)

1.子类函数和父类函数声明一致(函数名,调用约定,参数列表,返回值)

2.父类函数有virtual关键字,子类可以不加virtual关键字

 

三.函数隐藏(子类隐藏父类的同名成员,或者说内层作用域隐藏外层作用域的同名成员)

1.作用域不同,例如子类和父类

2.子类和父类的函数同名,函数声明没要求

 

class B {
public:
	void F() {}
	virtual void F(int) {}
	virtual void g(int, int) {}
};

class D :public B {
public:
	virtual void g(int, int) override {}

	//派生类的成员隐藏了同名的基类成员。声明在内层作用域的函数不会重载声明在外层作用域内的函数
	void F(int, int) {}
	
};

int  main() {
	
	D d;
	d.g(1, 1);
	//d.F(3);//参数列表不匹配,编译报错。只能调用D的F,看不到B的F,除非加作用域运算符。

	return 0;
}

  

以上是关于14. 函数重载,函数覆盖,函数隐藏的主要内容,如果未能解决你的问题,请参考以下文章

C++重载隐藏和覆盖的区别

重载隐藏覆盖的区别

类中的同名函数关系,重载,覆盖/重写,隐藏

成员函数的重载,覆盖与隐藏

类成员函数的重载覆盖和隐藏

C++中成员函数的重载覆盖和隐藏的区别