未命名的类可以继承。这很有用,例如,在您必须继承以覆盖虚函数但您永远不需要多个类的实例并且不需要引用派生类型的情况下,因为对基类的引用类型就足够了。
这是一个例子:
#include <iostream>
using namespace std;
struct Base {virtual int process(int a, int b) = 0;};
static struct : Base {
int process(int a, int b) { return a+b;}
} add;
static struct : Base {
int process(int a, int b) { return a-b;}
} subtract;
static struct : Base {
int process(int a, int b) { return a*b;}
} multiply;
static struct : Base {
int process(int a, int b) { return a/b;}
} divide;
void perform(Base& op, int a, int b) {
cout << "input: " << a << ", " << b << "; output: " << op.process(a, b) << endl;
}
int main() {
perform(add, 2, 3);
perform(subtract, 6, 1);
perform(multiply, 6, 7);
perform(divide, 72, 8);
return 0;
}
此代码创建四个匿名派生Base
- 每个操作一个。当这些派生的实例被传递给perform
函数时,会调用适当的覆盖。请注意,perform
不需要了解任何特定类型 - 具有其虚函数的基本类型足以完成该过程。
这是运行上述代码的输出:
input: 2, 3; output: 5
input: 6, 1; output: 5
input: 6, 7; output: 42
input: 72, 8; output: 9
ideone 上的演示。