gpt4 book ai didi

c++ - 如何在结构中声明类的实例?

转载 作者:行者123 更新时间:2023-11-28 08:22:42 24 4
gpt4 key购买 nike

Class className{ ... 

struct vec
{ string name;
className value;
};

上面是我的类和结构定义,我的类对象应该是结构的值部分

我已经尝试了很多东西:(例如)

vecName.value = className hey;

但没什么..这不应该很难,但我发现自己在挣扎..有人吗?谢谢

最佳答案

你的问题不是很好,但是这里有一些可以编译和工作的东西,你可以从中提取你需要的信息

#include <string>

class ClassName {
// your code
};

struct vec
{
std::string name;
ClassName value;
};

int main() {
vec v;
ClassName yourclass;
v.name = "hey";
v.value = yourclass;
}

但是,虽然这行得通,但这段代码中有几处可以被视为“不良做法”。

首先,您可能应该将 vec 设为类而不是结构,并为其提供适当的构造函数,将名称和值设为私有(private)等。

所以这是一个稍微好一点的例子:

#include <string>

class ClassName {
// your code
};

class Vec
{
public:
Vec(const std::string &name, const ClassName &value)
: name_(name), value_(value) {}

const std::string& getName() { return name_; }
const ClassName& getValue() { return value_; }

void setName(const std::string &name) { name_ = name; }
void setValue(const ClassName &value) { value_ = value; }

private:
std::string name_;
ClassName value_;
};

int main() {
ClassName yourclass1;
Vec v("hey", yourclass1);
}

它仍然不完美,因为:

  1. 每次复制 Vec 时,您(仍然)也复制了您的类。这可能很好,具体取决于您的应用程序,但如果您的类(class)很大,它也可能会减慢您的应用程序。在这种情况下,您可能希望将指针或智能指针(如 boost::shared_ptr)存储到您的类中。

  2. 我刚刚提供了 getX() 和 setX()。如果你能想出做逻辑事情而不是纯粹获取/设置值的函数,那就更好了,就像 Dog 类可能有 run() 和 jump() 和 getHappiness()

但是,这些事情取决于您要做什么,因此您必须自己动手。

关于c++ - 如何在结构中声明类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213231/

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