标签:error 父类 erro oid 报错 virtual vat nal 成员函数
1. override 重载
当你在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以:
class A { virtual void foo(); } class B :public A { void foo(); //OK virtual foo(); // OK void foo() override; //OK }
如果不使用override,当你手一抖,将foo()写成了f00()会怎么样呢?结果是编译器并不会报错,因为它并不知道你的目的是重写虚函数,而是把它当成了新的函数。如果这个虚函数很重要的话,那就会对整个程序不利。
所以,override的作用就出来了,它指定了子类的这个虚函数是重写的父类的,如果你名字不小心打错了的话,编译器是不会编译通过的:
class A { virtual void foo(); }; class B :A { virtual void f00(); //OK virtual void f0o()override; //Error };
为了减少程序的运行时错误,还是养成重写虚函数加上override的习惯吧。
2.final
当不希望某个类被继承,或不希望某个虚函数被重写,可以在类名和虚函数后添加final关键字,添加final关键字后被继承或重写,编译器会报错。例子如下:
class Base { virtual void foo(); }; class A : Base { void foo() final; // foo 被override并且是最后一个override,在其子类中不可以重写 void bar() final; // Error: 父类中没有 bar虚函数可以被重写或final }; class B final : A // 指明B是不可以被继承的 { void foo() override; // Error: 在A中已经被final了 }; class C : B // Error: B is final { };
3. default 和delete
=default、=delete 是C++11的新特性,分别为:显式缺省(告知编译器生成函数默认的缺省版本)和显式删除(告知编译器不生成函数默认的缺省版本)。C++11中引进这两种新特性的目的是为了增强对“类默认函数的控制”,从而让程序员更加精准地去控制默认版本的函数
C++开发中,我们经常需要控制某些函数的生成。在C++11之前,我们经常的普遍做法是将其声明为类的 private 成员函数,这样若在类外这些这些函数的操作时候,编译器便会报错,从而达到效果。
注:若缺省版本被删除了,重载该函数是非法的
override final default delete修饰的成员函数
标签:error 父类 erro oid 报错 virtual vat nal 成员函数
原文地址:https://www.cnblogs.com/guxuanqing/p/11656307.html