但是编译器显示getB为未知重写说明符
时间: 2024-02-25 18:55:40 浏览: 40
如果编译器提示 `unknown override specifier` 错误,这可能是因为你在函数声明或定义中使用了不正确的重写说明符。重写说明符是用于指定函数是否重写了基类函数的关键字,它应该放在函数声明或定义的开头,例如:
```
class B {};
class A {
public:
virtual B getB() {
return B();
}
};
```
在这个例子中,我们在类 A 中使用了 `virtual` 关键字来指定 `getB()` 函数是一个虚函数,并且返回类型为 B。请注意,在基类中使用 `virtual` 关键字来声明虚函数是非常重要的,否则子类无法正确地重写它。
如果你想在子类中重写父类中的虚函数,你需要使用 `override` 关键字来指示这个函数是一个重写函数,例如:
```
class B {};
class A {
public:
virtual B getB() {
return B();
}
};
class C : public A {
public:
B getB() override {
return B();
}
};
```
在这个例子中,我们定义了一个类 C,它是从类 A 继承而来的,并且重写了 `getB()` 函数。在子类中使用 `override` 关键字可以确保你正确地重写了父类中的虚函数。如果你的编译器不支持 `override` 关键字,你可以使用 `virtual` 关键字来代替,例如:
```
class B {};
class A {
public:
virtual B getB() {
return B();
}
};
class C : public A {
public:
virtual B getB() {
return B();
}
};
```
在这个例子中,我们在子类中使用 `virtual` 关键字来重写父类中的虚函数。这样做可以确保你正确地重写了父类中的虚函数,但是使用 `override` 关键字会更加清晰和易于维护。
阅读全文