C++中的虚函数(virtual function)和纯虚函数(pure virtual function)是面向对象编程中多态性的重要实现机制。它们允许通过基类指针或引用来调用派生类中的函数,而不是基类中的函数。
虚函数(Virtual Function)
虚函数是在基类中声明的,并在一个或多个派生类中被重写的函数。当我们通过基类指针或引用来调用虚函数时,实际调用的是指针或引用所指向对象的派生类中的版本(如果存在的话)。如果指针或引用指向的是基类对象,那么就会调用基类中的版本。这就是动态绑定或运行时多态性。
虚函数的主要目的是允许派生类改变或扩展基类的行为。
例如:
class Base {
public:
virtual void func() {
std::cout << "Base function\n";
}
};
class Derived : public Base {
public:
void func() override {
std::cout << "Derived function\n";
}
};
int main() {
Base* ptr = new Derived();
ptr->func(); // 输出 "Derived function"
delete ptr;
return 0;
}
纯虚函数(Pure Virtual Function)
纯虚函数是一种特殊的虚函数,它在基类中没有实现(即没有函数体)。纯虚函数在声明时必须以= 0结尾。包含纯虚函数的类是抽象类,不能创建其实例。派生类必须提供纯虚函数的实现,除非派生类本身也是抽象类。
纯虚函数的主要目的是强制派生类提供特定的实现。
例如:
class AbstractBase {
public:
virtual void pureVirtualFunc() = 0; // 纯虚函数
};
class Derived : public AbstractBase {
public:
void pureVirtualFunc() override {
std::cout << "Derived implementation\n";
}
};
int main() {
// AbstractBase* ptr = new AbstractBase(); // 错误:不能创建抽象类的实例
AbstractBase* ptr = new Derived();
ptr->pureVirtualFunc(); // 输出 "Derived implementation"
delete ptr;
return 0;
}
纯虚函数常常用于接口定义,即***定义一个类应该具有哪些函数,但不提供具体的实现***。实现将由派生类提供。