c++中虚函数和纯虚函数的作用与区别
时间: 2023-09-09 07:11:06 浏览: 158
虚函数和纯虚函数都是用来实现多态性的一种机制,可以在基类中定义并在派生类中进行重写。它们的作用是允许在运行时根据对象的实际类型来调用相应的函数。
虚函数在基类中有定义,但可以在派生类中进行重写。虚函数可以在派生类中进行重写,也可以不进行重写。如果在派生类中不进行重写,派生类实例调用虚函数时将调用基类中的实现。而如果在派生类中进行了重写,派生类实例调用虚函数时将调用派生类中的实现。
纯虚函数在基类中没有定义,必须在派生类中进行实现。纯虚函数相当于接口函数,派生类必须实现基类中定义的纯虚函数。在派生类中实现纯虚函数后,派生类实例调用纯虚函数时将调用派生类中的实现。
下面是一个代码示例,展示了虚函数和纯虚函数的使用和区别:
```
#include <iostream>
using namespace std;
class Base {
public:
virtual void func() { // 虚函数
cout << "it's Base" << endl;
}
virtual void pureFunc() = 0; // 纯虚函数
};
class Child1 : public Base {
public:
void func() { // 覆写虚函数
cout << "it's Child1" << endl;
}
void pureFunc() { // 实现纯虚函数
cout << "it's Child1 pureFunc" << endl;
}
};
class Child2 : public Base {
public:
void func() { // 覆写虚函数
cout << "it's Child2" << endl;
}
void pureFunc() { // 实现纯虚函数
cout << "it's Child2 pureFunc" << endl;
}
};
int main() {
Base* b = nullptr;
Child1 c1;
Child2 c2;
b = &c1;
b->func(); // 多态,调用Child1中的func函数
b->pureFunc(); // 多态,调用Child1中的pureFunc函数
b = &c2;
b->func(); // 多态,调用Child2中的func函数
b->pureFunc(); // 多态,调用Child2中的pureFunc函数
return 0;
}
```
在上述代码中,Base类包含了一个虚函数func()和一个纯虚函数pureFunc()。Child1和Child2分别继承自Base类,并覆写了func()和实现了pureFunc()。在main函数中,通过基类指针b来实现多态性,调用不同派生类中的虚函数和纯虚函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [C++中虚函数和纯虚函数的区别](https://blog.csdn.net/weixin_43869898/article/details/111436474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [c++中虚函数和纯虚函数的作用与区别](https://download.csdn.net/download/weixin_38673798/13989996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文