1。同名+同参数表+同返回值类型
2。参数表不能兼容derived
3。返回值类型可以兼容derived
4。默认参数,const修饰可以使用,但需一致书写,否则语法对语义上不鲁棒
const对虚拟函数:
(1)比如const用在Base,而Derived无const修饰时,这使Base的const对象才能使用此成员函数,而Derived的任何对象均可使用此virtual成员函数
(2)const使得使用静态类型,取消滞后联编
class B { public: virtual void ok() const{cout << "B::okokok" << endl;} }; class D:public B { public: void ok() {cout << "D::okokok" << endl;} }; int main() { // const B b; // b.ok(); B *pb = new D; pb -> ok(); //B::okokok D *pd = new D; pd -> ok(); //D::okokok delete pb; return 0; }
默认参数对虚拟函数
(1)未破坏滞后联编
(2)默认参数是在编译的时候带入的
class B{public: virtual void ok(int = 3) {cout << "B::okokok" << endl;}};class D:public B{public: void ok(int i) {cout << "D::okokok" << endl; cout << i << endl;}};int main(){ // const B b; // b.ok(); B *pb = new D; pb -> ok(); //D::okokok D *pd = new D; pd -> ok(3); //D::okokok delete pb; return 0;}