c++子类怎么强制覆盖父类的非虚成员函数
时间: 2024-01-25 21:03:31 浏览: 214
这里可能有个疑问-虚函数和动态联编
在C++中,我们可以使用`override`关键字来强制子类覆盖父类的虚函数,但是非虚函数是不能被重写的。不过,你可以在子类中定义一个同名的函数来隐藏父类的同名函数。为了强制子类覆盖父类的非虚函数,你可以使用`virtual`关键字来将父类的函数声明为虚函数,然后在子类中覆盖它。
例如,假设父类有一个非虚函数`foo()`:
```
class Parent {
public:
void foo() {
// 父类foo()的实现
}
};
```
你可以在子类中定义一个同名的函数来隐藏它:
```
class Child : public Parent {
public:
void foo() {
// 子类foo()的实现
}
};
```
但是这只是隐藏了父类的同名函数,而不是覆盖它。如果你想强制子类覆盖父类的非虚函数,你可以将父类的函数声明为虚函数:
```
class Parent {
public:
virtual void foo() {
// 父类foo()的实现
}
};
```
现在,子类必须使用`override`关键字来覆盖父类的虚函数:
```
class Child : public Parent {
public:
void foo() override {
// 子类foo()的实现
}
};
```
这样,如果子类没有实现`foo()`函数,编译器将会报错。
阅读全文