繁体   English   中英

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

[英]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);
}

它仍然不是完美的,因为:

  1. 每次复制Vec时,您(仍然)也复制您的班级。 这可能很好,取决于您的应用程序,但是如果您的类很大,它也可能会使您的应用程序变慢。 在这种情况下,您可能想要存储指向您的类的指针或智能指针(例如boost :: shared_ptr )。

  2. 我只提供了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM