如果你愿意,你可以做和 Java 一样的事情。
struct Type {
std::string Name;
};
struct Numeric : Type {
int value, min, max;
};
struct Descriptive : Type {
std::string value, min, max;
};
然而,在您决定如何实现您的特性之前,您必须更好地定义您将如何使用它以及您想要的界面。例如,上面的内容并不便于将 Type 对象用作多态对象。您必须手动检查 Type 指针是否指向 Numeric 或 Descriptive 并采取相应措施。
获得多态性的一种方法是 C++ 是使用虚拟方法:
struct Type {
~Type() {} // virtual destructor
virtual void do_something() = 0; // pure virtual function. Derived classes must provide an implementation
std::string Name;
};
struct Numeric : Type {
virtual void do_something() {
std::cout << "Numeric value: " << value << " (" << min << ',' << max << ")\n";
}
int value, min, max;
};
struct Descriptive : Type {
virtual void do_something() {
std::cout << "Descriptive value: " << value << " (" << min << ',' << max << ")\n";
}
std::string value, min, max;
};
现在,当您调用do_something
a时Type *
,它会为动态类型找出正确的方法并调用它。