我正在试图找出c ++程序的最佳方法:
我需要创建一个名为Character的对象。这家伙有4个属性:
- 字符串名称(只是名称)
- ?类型(它是什么类型的特征。可以是数字的或描述性的)
- ?范围(数字 - 最小和最大
描述性的 - 选项)
- ? value(实际选择的值可以是int或string,具体取决于类型)
如果我是Java,我会创建一个带有两个子节点的对象Type:Numeric和Descriptive。每个都有适当的范围,并以适当的格式存储值。
两者的例子:
名称:气密性
类型:数字
范围:最小1最大5
价值:2
名称:风格
类型:描述性
范围:简约摄影
价值:简约
我不知道在c ++中这样做的最佳方法是什么 我应该看模板吗?因为如果是这样我就无法弄清楚如何使用它们。
答案 0 :(得分:1)
如果你愿意,你可以做与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
上致电Type *
时,它会为动态类型找出正确的方法并调用它。
答案 1 :(得分:0)
您可以在C ++中选择几种方法:
如果没有进一步的细节,就不可能给出好的论据,为什么你应该更喜欢一个而不是另一个。