对象,其属性可以为同一属性指定不同的类型 我试图找出C++程序的最佳方法:

对象,其属性可以为同一属性指定不同的类型 我试图找出C++程序的最佳方法:,c++,class,object,C++,Class,Object,我需要制作一个叫做特征的物体。这家伙有4个属性: -字符串名称(仅名称) - ? 类型(它是什么类型的特征。可以是数字的,也可以是描述性的) - ? 范围(数字-最小值和最大值 描述性-选项) - ? 值(实际选择的值可以是int或string,具体取决于类型) 如果我使用Java,我会创建一个对象类型,它有两个子对象:数值型和描述性。每个都有适当的范围,并以适当的格式存储值 两者的示例: 名称:温暖度 类型:数字 范围:最小1个最大5个 价值:2 名称:样式 类型

我需要制作一个叫做特征的物体。这家伙有4个属性:
-字符串名称(仅名称)
- ? 类型(它是什么类型的特征。可以是数字的,也可以是描述性的)
- ? 范围(数字-最小值和最大值
描述性-选项)
- ? 值(实际选择的值可以是int或string,具体取决于类型)

如果我使用Java,我会创建一个对象类型,它有两个子对象:数值型和描述性。每个都有适当的范围,并以适当的格式存储值

两者的示例:
名称:温暖度
类型:数字
范围:最小1个最大5个
价值:2

名称:样式
类型:描述性
范围:极简摄影
价值:极简主义

我不知道在C++中最好的方法是什么。
我应该看看模板吗?因为如果是这样,我就不知道如何使用它们。

在C++中,有几种方法可以选择:

  • 继承权。不仅仅是Java可以实现这一点。如果这是爪哇使用的方法,我不明白为什么C++中不能这么做。
  • 模板。这种方法对应于Java泛型
  • 工会。我不认为有一个Java对应,可能值得研究

如果没有进一步的细节,就不可能给出好的论据,说明为什么您应该选择一个而不是另一个。

如果您愿意,您可以做与Java相同的事情

struct Type {
    std::string Name;
};

struct Numeric : Type {
    int value, min, max;
};

struct Descriptive : Type {
    std::string value, min, max;
};
然而,在您决定如何实现您的特性之前,您必须更好地定义如何使用它以及您想要的接口。例如,上面提到的将类型对象用作多态对象并不容易。您必须手动检查类型指针是否指向数字或描述性指针,并相应地执行操作


一种获得多态性的方法是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;
};
结构类型{
~Type(){}//虚拟析构函数
虚拟void do_something()=0;//纯虚拟函数。派生类必须提供实现
std::字符串名;
};
结构数值:类型{
虚拟空间做某事{

std::cout有没有一种方法可以实现自动?这个特性将是一件衣服的一部分,它有一个哈希表,然后存储在一个壁橱对象中。这会让它更清晰吗?@kotoko这还不够,但我可以用一种方法来扩展我的示例,使数字与描述性自动进行一些使用。我该怎么做使用模板?你能举一个小例子吗?这个特性将是一件衣服的一部分,它有一个哈希表,然后存储在一个壁橱对象中。