1、C++函数重写、覆盖(override)
特征:
1) 不同的范围(分别位于派生类与基类);
2) 函数名字相同;
3) 参数相同;
4) 基类函数必须有virtual关键字。
1)被重写的函数不能是static的。必须是virtual的,或者是override的(即函数在最原始的基类中被声明为virtual,c++中没有override)。
2)重写函数必须有相同的类型,名称和参数列表
3)重写函数的访问修饰符可以不同。尽管virtual是private的,派生类中重写改写为public,protected也是可以的(这点与C#完全不同)
2、C++函数重载(overload)
特征:
成员函数被重载的特征有:
1) 相同的范围(在同一个类中);
2) 函数名字相同;
3) 参数不同;
4) virtual关键字可有可无
1)直观的理解,重载就是一个名称相同的函数有不同版本(参数列表不同:参数类型,顺序)。
2)构成重载函数集的函数必须在同一个域。例如,试图在基类和派生类中的同名函数集中构成一个重载集,将引发错误(函数调用时,编译错误),事实上,派生类中的新函数“版本”隐藏了基类中定义的函数(隐藏在C++很少提及,但存在)
3、C++函数隐藏(hide)
特征:
1) 不同的范围(分别位于派生类与基类);
2) 函数名字相同;
3) 参数相同;
4) 基类函数没有virtual关键字。
5)同名不同参不管有无virtual。
小结:什么是隐藏情况?
1,同名同参无virtual(指父类和子类中的子方同名同参无virtual)都隐藏。
2,同名不同参不管有无virtual(指父类和子类中的子方同名不同参不管有无virtual)都隐藏。