gpt4 book ai didi

c++ - 具有同一属性可以不同类型的属性的对象

转载 作者:行者123 更新时间:2023-11-28 08:06:25 26 4
gpt4 key购买 nike

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

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

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

两者的例子:
名称:温暖
类型:数值
范围:最小 1 最大 5
值(value):2

名称:样式
类型:描述性
范围:简约摄影
值(value)观:简约

我不知道在 C++ 中执行此操作的最佳方法是什么。
我应该看模板吗?因为如果是的话我不知道如何使用它们。

最佳答案

如果需要,您可以做与 Java 相同的事情。

struct Type {
std::string Name;
};

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

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

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


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 * 上调用 do_something 时,它会为动态类型找出正确的方法并调用它。

关于c++ - 具有同一属性可以不同类型的属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10217025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com