1.函数重载:
1.同一作用域
2.函数名字相同,参数列表不同
3.参数列表不同为,参数顺序,类型大小,参数的个数不同
4.与返回值类型无关
2.多态重写(覆盖):
1.两个函数分别在基类和派生类的作用域中
2.函数的类型相同
3.函数类型包括:返回值类型,参数名字,参数列表
4.但是也有函数类型不同但是可以实现重写的例外:
i:返回值不同的例外:斜变
协变:基类虚函数返回基类对象的指针或引用
派生类的虚函数返回派生类的指针或引用
ii:函数名字不同的例外:
子类与基类的析构函数如果都是虚函数,名字不同但是可以构成重写
5.两个函数必须都是虚函数
3.同名隐藏(重定义):
1.两个函数分别在基类和派生类的作用域中
2.函数的名字相同
3.基类和派生类的两个同名函数不构成重写,就是同名隐藏
附加:
接口继承和实现继承:
普通函数的继承是一种实现继承,派生类继承了基类函数,可以使用函数,
,继承的是函数的实现。
虚函数的继承是一种接口继承,派生类继承的是基类虚函数的接口,目的是
为了重写,达成多态,继承的是接口。所以如果不实现多态,不要把函数定义成
虚函数。