函数的覆盖
1.基类函数必须是虚函数
2.发生覆盖的两个函数必须分别位于基类和派生类中
3.函数名称与函数列表必须完全相同
函数的隐藏
1.派生类的函数与基类的函数完全一样(函数名和参数列表都一样),但基类的函数没有使用virtual关键字,此时基类的函数将被隐藏而不是覆盖
2.派生类的函数与基类的函数同名,但参数不同,此时,无论基类的函数是否使用virtual关键字,基类的函数都将被隐藏
函数的重载
1.同一个类中,定义的构造函数名相同,构造函数的参数类型,参数个数不同,就构成了函数的重载
2.如果只有函数的返回类型不同,是无法构成函数的重载的,例如
(1)void output();
(2)long output();
3.要注意函数带有默认参数的情况,例如
(1)void output(int a, int b=100);
(2)void output(int a);
当我们调用output(5);时,两种情况的output都可以被调用,此时出现歧义,因此,此时不能构成函数的重载
总结
函数的覆盖和隐藏 是发生在基类和派生类中的,而函数的重载是发生在同一个类中的,不知道这样理解是否片面,有机会询问一下大神,确认一下再更正!
加强一下:
函数的覆盖发生在基类和派生类之间,且函数必须完全相同,并且都是虚函数。不是这种情况的,就是函数的隐藏了。
网友评论