c++父类方法什么时候写成虚函数
时间: 2023-10-23 08:12:58 浏览: 58
在C++中,当你需要在子类中重写(override)父类的方法,并且希望在运行时动态绑定(dynamic binding)时,你需要将这个父类方法声明为虚函数。这样,当你用子类的指针或引用调用该方法时,实际执行的是子类的方法而不是父类的方法,实现了多态性(polymorphism)。
需要注意的是,如果你不希望子类重写该方法,你可以将其声明为非虚函数,这样就无法动态绑定。
相关问题
c++继承父类 实现父类的虚函数
在 C++ 中,继承父类并实现父类的虚函数可以通过以下代码实现:
```c++
class Parent {
public:
virtual void foo() {
std::cout << "Parent foo" << std::endl;
}
};
class Child : public Parent {
public:
void foo() override {
std::cout << "Child foo" << std::endl;
}
};
int main() {
Parent* p = new Child();
p->foo(); // 输出 Child foo
delete p;
return 0;
}
```
在上面的代码中,我们定义了一个 `Parent` 类和一个 `Child` 类,`Child` 类继承自 `Parent` 类。`Parent` 类中定义了一个虚函数 `foo()`,在 `Child` 类中通过 `override` 关键字重写了这个虚函数。在 `main` 函数中,我们创建了一个 `Child` 对象的指针,并将该指针赋值给了一个 `Parent` 类型的指针 `p`,然后通过 `p->foo()` 调用了 `Child` 类中重写的 `foo()` 函数,输出了 `Child foo`。注意,为了正确调用 `Child` 类中重写的 `foo()` 函数,我们需要将 `Parent` 类中的虚函数声明为 `virtual`,并且在 `Child` 类中使用 `override` 关键字来标识该函数是对父类中虚函数的重写。
C++父类析构中调用的虚函数,子类重写虚函数,最后调用的是谁的虚函数
在C++中,当一个类中定义了虚函数,如果该类有子类继承它并且重写了该虚函数,那么在使用子类对象时,调用该虚函数会优先调用子类重写的虚函数。
对于析构函数,如果父类中定义了虚析构函数,那么在使用子类对象时,会先调用子类的析构函数,然后再调用父类的析构函数。如果子类没有定义析构函数,那么会直接调用父类的析构函数。
因此,在父类析构函数中调用虚函数时,如果子类重写了该虚函数,最后调用的就是子类重写的虚函数。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)