virtual function 和function 的区别?
时间: 2025-01-29 13:13:20 浏览: 21
在面向对象编程中,virtual function(虚函数)和普通函数(function)有显著的区别,主要体现在多态性和函数调用的机制上。
- 虚函数(virtual function):
- 定义:虚函数是在基类中使用
virtual
关键字声明的成员函数。 - 多态性:虚函数允许在派生类中重写(override)基类的函数,从而实现运行时的多态性。也就是说,通过基类指针或引用调用虚函数时,实际调用的是派生类中重写的函数。
- 定义:普通函数是在类中声明和定义的成员函数,不使用
virtual
关键字。 - 静态绑定:普通函数的调用是在编译时决定的,这称为静态绑定。即使通过基类指针或引用调用普通函数,调用的也是基类中的函数,而不是派生类中的重写函数。
- 定义:虚函数是在基类中使用
示例
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() { // 虚函数
cout << "Base class show function" << endl;
}
void display() { // 普通函数
cout << "Base class display function" << endl;
}
};
class Derived : public Base {
public:
void show() override { // 重写虚函数
cout << "Derived class show function" << endl;
}
void display() { // 重写普通函数
cout << "Derived class display function" << endl;
}
};
int main() {
Base* b;
Derived d;
b = &d;
// 调用虚函数,实际调用的是Derived::show()
b->show(); // 输出: Derived class show function
// 调用普通函数,实际调用的是Base::display()
b->display(); // 输出: Base class display function
return 0;
}
在这个示例中,show()
是一个虚函数,display()
是一个普通函数。通过基类指针b
调用show()
时,实际调用的是Derived
类中的show()
,而调用display()
时,实际调用的是Base
类中的display()
。
阅读全文
相关推荐

















