子类的虚函数和非虚函数的区别

Avi*_*mar 2 c++ overriding

让我的parent班级成为;

class parent {  
    virtual void printx () { cout<< "parent" ; }  
}
Run Code Online (Sandbox Code Playgroud)

情况1:

class child : public parent {  
     virtual void printx() { cout<< " child" ; }  
}
Run Code Online (Sandbox Code Playgroud)

案例2:

class child : public parent { 
    void printx() { cout<< " child" ; }  
}
Run Code Online (Sandbox Code Playgroud)

如果我virtualchild类中省略了printx案例2中的函数,有什么区别吗?

Nia*_*all 5

如果函数签名相同,child则不需要将类添加virtual到方法中,编译器会为您处理此问题.如果在父类中将函数声明为虚拟,则子项的重写方法也是虚拟的.

如果C++ 11可用,请考虑将子说明override添加到子类中的重写方法;

class child : public parent { 
    void printx() override { cout<< " child" ; }  
}
Run Code Online (Sandbox Code Playgroud)

使用override,编译器将检查以确保此方法确实覆盖基类中的虚方法.如果没有,编译器将为您生成错误.例如; 与原始帖子一样,它将获取printx和之间的拼写差异pritnx.

  • +1重要的是...这将引起人们对'printx`和`pritnx`不同的事实的关注.... (3认同)