发布于2026-07-12 阅读(0)
扫一扫,手机访问
在C++的面向对象体系里,多态是一个绕不开的核心概念。简单来说,它允许我们用基类的指针或引用去调用派生类的成员函数,实现所谓的动态绑定。那么,具体怎么做到的呢?主要靠两条路——虚函数和抽象类。往下看。

一、虚函数
虚函数,就是在基类中用关键字 virtual 声明的成员函数。派生类拿到这个基类后,可以重写(override)这些函数。关键来了:当通过基类的指针或引用去调用虚函数时,C++ 不会只看指针的静态类型,而是根据它实际指向的对象类型来决定调用哪个函数。这就是动态绑定的本质。
看个例子就清楚了:
#include
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 类的版本
return 0;
}
这里 basePtr 明明是 Base 类型的指针,但它指向的是 Derived 对象,所以调用 print() 时,输出的是 “Derived class print function”。如果没有 virtual,那就会调用 Base 的版本——差别就在这。
二、抽象类
抽象类是一种不能实例化的类,它通常用来定义接口。怎么定义?靠纯虚函数(pu re virtual function)。纯虚函数在基类中只有声明,没有实现,必须在派生类里完成具体的逻辑。只要一个类包含至少一个纯虚函数,它就成了抽象类。
示例很直观:
#include
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 类的版本
return 0;
}
你看,AbstractBase 本身不能创建对象,但是可以定义指针,指向派生类对象,然后调用派生类实现的 print()。这种设计在框架和库中非常常见——通过抽象类定义一套接口契约,具体行为留给子类去填充。
说到底,C++ 里的多态就是靠虚函数和抽象类这两板斧。虚函数让动态绑定成为可能,抽象类则帮我们搭出清晰的接口架构。用好它们,代码的扩展性和可维护性会提升一个档次。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8