1、overload重载,发生在两个函数作用域相同,两个函数名相同,但是函数参数数量,类型,顺序不同的情况下,此时编译器将会根据传入的参数数量、类型和顺序不同来决定调用哪个函数。注意,返回类型不同无法构成overload,但是const有时候会造成重载,具体情况如下图:
其中,放在函数尾部修饰时的例子如下:
2、override覆盖,发生在基类有虚函数时,派生类可以重写和基类虚函数同名且参数表也相同的函数,此时编译器将按照指针来决定调用哪个函数。当然,指针只能是基类的指针,因为派生类将会包含基类的所有方法和变量,那么基类的指针也可以被当作是派生类的指针来看待。所以一个基类的指针,如果是指向了一个派生类,且该派生类中也重写了基类中的虚函数,那么调用该指针的该名称方法将会直接调用该派生类中重写的该方法。
3、hide隐藏,发生在基类函数和派生类函数同名,但是基类该名称函数没有virtual关键字修饰,这将导致无法在派生类中调用到基类的函数,当然在基类的对象中还是可以调用到基类中的该函数。