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

时间:2011-03-06 20:36:28

标签: c++ oop

Class className{ ... 

struct vec
{   string name;
    className value;
};

以上是我的类和结构定义,我的类对象应该是struct

的值部分

我尝试了很多东西:(对于前)

vecName.value = className hey;

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

2 个答案:

答案 0 :(得分:1)

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

#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()

  3. 然而,这些都取决于你想要做的事情,所以你必须自己做。

答案 1 :(得分:0)

是否要将className的实例设置为vecName.value

className instance;

vecName.value = instance;

或者,如果您只想将vecName.value设置为className的新实例:

vecName.value = className();