-
override
重写override:用于修饰覆写的虚函数。表明父类中有此虚函数,同名,同参,同返回中有一样不满足,则会报错。下面的两种覆写的方法,如类Rect和triagle两个类的写法。
#include <iostream>
using namespace std;
class Shape
{
public:
virtual void draw(){
printf("222\n");
}
};
class Rect:public Shape
{
public:
void draw() override{
printf("1111\n");
}// 覆写了子类的虚函数
};
class triagle:public Shape
{
public:
virtual void draw() {
printf("3333\n");
}
};
int main(){
Rect* mRect = new Rect();
mRect->draw();
delete(mRect);
triagle* aa = new triagle();
aa->draw();
delete(aa);
return 0 ;
}
-
final
当不希望某个类被继承,或不希望某个虚函数被重写,在类名后添加final关键字,代表这个类不可被继承。
虚函数后添加final关键字,添加final关键字后被继承或重写,编译器会报错。
#include <iostream>
using namespace std;
class Base
{
virtual void foo();
};
class A : Base
{
void foo() final {
printf("1111\n");
}; // foo 被override并且是最后一个override,在其子类中不可以重写
};
class B final : A // 指明B是不可以被继承的
{
void foo() override; // Error: 在A中已经被final了
};
class C : B // Error: B is final
{
};
int main ()
{
}