在C++中,多态主要通过虚函数(virtual functions)和抽象类(abstract classes)来实现。多态允许我们使用基类的指针或引用来调用派生类的成员函数,从而实现动态绑定。以下是实现多态的两种主要方式:
虚函数是在基类中使用关键字virtual声明的成员函数。当派生类继承基类时,可以重写(override)这些虚函数。当使用基类的指针或引用调用这些虚函数时,将调用实际对象的虚函数,而不是基类的虚函数。这就是动态绑定。
示例:
#include <iostream>
class Base {
public:
virtual void print() {
std::cout << "Base class print function" << std::endl;
}
};
class Derived : public Base {
public:
void print() override { // 重写基类的虚函数
std::cout << "Derived class print function" << std::endl;
}
};
int main() {
Base *basePtr;
Derived derivedObj;
basePtr = &derivedObj;
basePtr->print(); // 输出 "Derived class print function",而不是 "Base class print function"
return 0;
}
抽象类是不能实例化的类,通常用于定义接口。抽象类可以包含纯虚函数(pure virtual functions),这些函数没有实现,必须在派生类中实现。当一个类包含至少一个纯虚函数时,该类成为抽象类。
示例:
#include <iostream>
class AbstractBase {
public:
virtual void print() = 0; // 纯虚函数,没有实现
};
class Derived : public AbstractBase {
public:
void print() override {
std::cout << "Derived class print function" << std::endl;
}
};
int main() {
AbstractBase *abstractBasePtr;
Derived derivedObj;
abstractBasePtr = &derivedObj;
abstractBasePtr->print(); // 输出 "Derived class print function"
return 0;
}
总之,在C++中,多态主要通过虚函数和抽象类来实现。虚函数允许我们在运行时动态绑定函数调用,而抽象类则用于定义接口。