首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有属性的对象,该属性可以为同一属性指定不同类型

具有属性的对象,该属性可以为同一属性指定不同类型
EN

Stack Overflow用户
提问于 2012-04-19 03:57:55
回答 2查看 164关注 0票数 0

我正在尝试找出c++程序的最佳方法:

我需要创建一个名为Characteristic的对象。这家伙有4个属性:

  • String name (仅名称)
  • ?类型(它是什么类型的特征。可以是数字也可以是描述性的)
  • ?范围(数字-最小值和最大值

描述性-选项)

  • ?(根据类型,实际选择的值可以是int或string )

value

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

两种情况的示例:

名称: Warmeness

类型:数字

范围:最小1最大5

值:2

名称:样式

类型:描述性

范围:极简主义摄影

价值观:极简主义

我不知道在c++中做这件事最好的方法是什么。

我应该看模板吗?因为如果是这样的话,我不知道如何使用它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-19 04:11:02

如果你愿意,你可以做和Java一样的事情。

代码语言:javascript
复制
struct Type {
    std::string Name;
};

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

struct Descriptive : Type {
    std::string value, min, max;
};

然而,在你决定如何实现你的特性之前,你必须更好地定义你将如何使用它以及你想要的接口。例如,上面的代码并不容易将Type对象用作多态对象。您必须手动检查类型指针是否指向数值或描述性类型,并相应地执行操作。

获得多态性的一种方法是使用C++:

代码语言:javascript
复制
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 *上调用do_something时,它将为动态类型找出正确的方法并调用该方法。

票数 1
EN

Stack Overflow用户

发布于 2012-04-19 04:04:03

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

  • 继承。不仅仅是Java可以做到这一点。如果这是您在Java语言中使用的方法,那么我不明白为什么您不能在C++.
  • Templates.中做同样的事情这种方法与Java generics.
  • Unions.相对应。我不认为有一个Java对应的,可能值得一查。

如果没有进一步的细节,就不可能给出很好的理由来说明为什么你应该更喜欢其中一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10217025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档