C++ 基类中没有定义某个虚函数,派生类中想实现某个特有的函数,怎么处理?
时间: 2024-09-19 17:08:52 浏览: 39
如果你在 C++ 的基类中没有定义某函数为虚函数(virtual),但在派生类中想要覆盖这个函数并提供特定的实现,你可以直接在派生类中声明并定义这个函数。这样做并不会自动成为虚函数,但是当你通过基类指针或引用调用这个函数时,会按照派生类的版本运行,因为 C++ 默认是非虚函数不会被虚拟化。
例如:
```cpp
class Base {
public:
// 基类中的函数,不是虚的
void nonVirtualFunction() { /*...*/ }
};
class Derived : public Base {
public:
// 派生类中重写了非虚函数
// 这里实现了特有的功能
void nonVirtualFunction() override { /*...*/ }
};
```
如果你想明确地将这个函数标记为虚函数,可以在基类中添加 `virtual` 关键字:
```cpp
class Base {
public:
// 将函数标记为虚函数
virtual void nonVirtualFunction() { /*...*/ }
};
class Derived : public Base {
public:
// 现在可以覆盖虚函数
// 这里实现了特有的功能
void nonVirtualFunction() override { /*...*/ }
};
```
相关问题
C++ 基类中没有定义某个虚函数,派生类中添加某个特有的函数,怎么处理?
在 C++ 中,如果基类中没有定义某个虚函数,而派生类想要添加特有的功能,通常的做法是在派生类中新增这个函数。由于该函数不是基类的一部分,所以它不会自动成为虚函数,也就是说,当你通过基类指针或引用调用这个派生类独有的函数时,会直接调用派生类的实现,而不是预期的基类行为。
不过,如果你想让这个新添加的函数也能像虚函数一样,在基于基类的对象上调用时能够“动态”地关联到派生类的版本,你需要手动将其声明为 `virtual` 或者 `override`,视情况而定:
```cpp
class Base {
public:
// 原有的基类函数
};
class Derived : public Base {
private:
// 新增的派生类特有的函数
virtual void derivedSpecificFunction() {
// 实现细节...
}
};
```
如果你希望在派生类中完全替换原有的基类函数的行为,可以使用 `override` 关键字:
```cpp
void Derived::derivedSpecificFunction() override {
// 派生类的实现...
}
```
阅读全文