虚函数-对虚函数的调用可能在运行时才被解析

对虚函数的调用可能在运行时才被解析

Quote base("0-201-82470-1",50);
print_total(cout,base,10);  //调用Quote::net_price
Bulk_quote derived("0-201-82470-1",50,5,19);
print_total(cout,derived,10);   //调用Bulk_quote::net_price
base = derived; //把derived的Quote部分拷贝给base
base.net_price(20); //调用Quote::net_price

finaloverride说明符

struct B{
    virtual void f1(int) const;
    virtual void f2();
    void f3();
};

struct D1 : B
{
    void f1(int) const override;    //正确: f1与基类中的f1匹配
    void f2(int) override;  //错误:B没有形如f2(int)的函数
    void f3() override; //错误: f3不是虚函数
    void f4() override; //错误: B没有名为f4的函数
};

struct D2 : B {
    //从B继承f2() 和 f3() ,覆盖f1(int)
    void f1(int) const final;       //不允许后续的其他类覆盖f1(int)
};

struct D3 : D2{
    void f2();  //正确:覆盖从间接基类B继承而来的f2
    void f1(int) const; //错误:D2已经将f2声明成final
};

回避虚函数的机制

你可能感兴趣的:(c++)