虚拟函数的定义与声明

来源:互联网 发布:绿岛网络舆情监测系统 编辑:程序博客网 时间:2024/06/05 14:37
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;
}
原创粉丝点击