[英]How do I declare an instance of a class within a struct?
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设为类而不是结构,并为其赋予适当的构造函数,将名称和值设为私有等。
所以这是一个更好的例子:
#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);
}
它仍然不是完美的,因为:
每次复制Vec时,您(仍然)也复制您的班级。 这可能很好,取决于您的应用程序,但是如果您的类很大,它也可能会使您的应用程序变慢。 在这种情况下,您可能想要存储指向您的类的指针或智能指针(例如boost :: shared_ptr )。
我只提供了getX()和setX()。 最好是提供一个执行逻辑操作的函数,而不是单纯地获取/设置值,例如Dog类可能具有run()和jump()和getHappiness()
但是,这些取决于您要尝试执行的操作,因此您必须自己进行操作。
您是否要将className
的实例设置为vecName.value
?
className instance;
vecName.value = instance;
或者,如果您只想将vecName.value
设置为className
的新实例:
vecName.value = className();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.