虚拟函数的定义与声明

    技术2022-05-11  71

    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;}

    最新回复(0)