在一个成员函数中调用一个虚函数时,对虚函数的调用进行动态束定
时间: 2024-02-23 18:57:16 浏览: 29
是的,当一个虚函数在成员函数中被调用时,会进行动态绑定。也就是说,实际调用的函数将是根据对象的实际类型所确定的,而不是根据指针或引用类型所确定的。动态绑定的实现是通过虚函数表来实现的。每个类都有一个虚函数表,其中存储了该类的虚函数的地址。当一个对象被创建时,它会包含一个指向该类的虚函数表的指针。当调用一个虚函数时,会根据该对象实际指向的虚函数表中存储的函数地址来确定调用哪个函数。
相关问题
假设说基类中有一个public的虚函数,在其派生类中可以调用吗
是的,派生类可以调用基类中的public虚函数。派生类可以继承基类中的所有成员,包括public虚函数。在派生类中,可以通过使用基类名限定符来调用基类的public虚函数。例如,假设基类名为Base,public虚函数名为func,则在派生类中可以使用`Base::func()`来调用基类的public虚函数。另外,如果在派生类中重新实现了基类中的虚函数,则可以通过使用关键字`override`来显式地指明这是对基类虚函数的重写。
C++如何重载虚函数,并在重载的虚函数中调用原来那个虚函数
在C++中,虚函数是在基类中声明为虚的,并且可以在派生类中被重载的一种特殊成员函数。当你需要在基类指针或引用指向的对象上调用正确的版本(由实际对象类型决定)的函数时,就使用虚函数。以下是虚函数的基本用法:
1. 宣声明虚函数:
```cpp
virtual return_type function_name(parameters) override;
```
`override` 关键字用于确保你正在覆盖的是基类中的虚函数,而不是一个非虚同名函数。
2. 在基类中定义虚函数:
```cpp
class Base {
public:
virtual void original_function() {
// 原始函数体
}
};
```
3. 重载虚函数:
在派生类中,你可以提供不同的实现:
```cpp
class Derived : public Base {
public:
// 这里重写了虚函数
virtual void original_function() override {
// 重载后的函数体,可以在此调用原函数
Base::original_function();
// ...其他操作...
}
};
```
这里,`Base::original_function();` 是在派生类的重载函数中调用了原来那个虚函数。