C++学习笔记-虚函数virtual

在 C++ 中,虚函数(Virtual Function) 是实现多态性(Polymorphism)的核心机制,多态性允许程序在运行时根据对象的实际类型来决定调用哪个函数。

虚函数演示

假如有如下两个类Entity、Player

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Entity
{
public:
	virtual std::string GetName() { return "Entity"; } // 指定该函数为虚函数
};

// Player类继承Entity类
class Player : public Entity
{
private:
	std::string m_Name;
public:
	Player(const std::string& name)
	{
		m_Name = name;
	}

	std::string GetName() override { return m_Name; } // override 指定该函数重写了父类的虚函数,这不是必须的,但它提供了更好的可读性。
};

我们希望:

  • 当我们传入Entity* 类型时打印"Entity"
  • 而我们传入Player* 类型时打印"Player"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void PrintName(Entity* entity)
{
	std::cout << entity->GetName() << std::endl;
}

int main()
{
	Entity* entity = new Entity();
	PrintName(entity);

	Player* player = new Player("Player");
	PrintName(player);
}

删除基类的virtual关键字看看会发生什么?

总结

  1. 核心作用:实现运行时多态,通过基类接口操作派生类对象。
  2. 关键机制:虚函数表(vtable)和虚函数指针(vptr)。
  3. 必用场景:基类析构函数、接口抽象(纯虚函数)。
  4. 慎用场景:性能敏感代码、构造函数/析构函数中调用虚函数。
  5. 现代改进:override 和 final 增强安全性。
updatedupdated2025-03-132025-03-13