保护基类 函数不可重写怎么实现
时间: 2024-09-12 08:14:52 浏览: 40
在C++等支持面向对象编程的语言中,保护基类的成员函数不可被重写是一种防止子类覆盖基类成员函数的行为的手段。这通常用于确保某些关键的基类方法在继承体系中保持其原有的实现,不被子类改写。实现这一机制的方法有几种:
1. 使用`final`关键字(C++11之后):在C++11标准中,引入了`final`关键字,可以用来修饰类和成员函数。如果用`final`修饰基类中的成员函数,则该函数在任何子类中都不能被重写。例如:
```cpp
class Base {
public:
virtual void function() final {
// 基类实现
}
};
class Derived : public Base {
public:
// 编译错误:function() 被声明为 final
void function() override {
// 子类实现
}
};
```
2. 使用`override`关键字(C++11之后):虽然`override`关键字本身不阻止重写,但它用于明确表示派生类中的函数是打算覆盖基类中的虚函数。这样,如果基类中的函数声明中有任何变动导致派生类中的函数不再匹配,则编译器会产生错误。这有助于防止意外的重写。例如:
```cpp
class Base {
public:
virtual void function() {
// 基类实现
}
};
class Derived : public Base {
public:
// 如果 Base::function 改变了签名,这个重写将会编译错误
void function() override {
// 子类实现
}
};
```
3. 使用访问控制:将基类成员函数声明为私有(private)或保护(protected),这样派生类就无法访问到这些成员函数,也就无法重写它们。
阅读全文