0

假设我正在定义一个表面对象

class surface
{
private:
    vector<point> points_;
    vector<hexFace> hexFaces_;
}

我已经写了一个point类,非常有必要,但是至于hexFace,其实很简单,就是一个四个点标签的列表,就是int[4]。而且我不需要对它做任何复杂的操作。

所以我的问题是:定义这样一个hexFace对象的最有效方法是什么。我应该使用结构,还是我最好去上课或其他什么?你会怎么办?谢谢

如果我需要上课,我可以在当前类中以嵌套方式定义另一个类吗?如果可以的话,我是否也必须在这个文件中编写它的构造函数?

结构是否需要构造函数来初始化它?

4

1 回答 1

3

你问了几个问题:

定义这样的 hexFace 对象的最有效方法是什么。

对于您选择的任何解决方案,运行时效率将大致相同。代码行效率,或维护者-程序员-大脑-功率效率可能更有价值。

如果您仅限于 C++11 之前的功能,我会使用:

struct hexFace {
  int labels_[4];
};

如果您可以使用 C++11 功能,请尝试:

class surface
{
private:
    std::vector<point> points_;
    std::vector<std::array<int, 4>> hexFaces_;
}

我应该使用结构,还是我最好去上课或其他什么?

struct并且class几乎是同义词。使用您认为更清楚地表达您的意图的任何一个。至于“别的”,试试std::array

我可以以嵌套方式在当前类中定义另一个类吗?

是的你可以。尝试:

class surface
{
private:
    class hexFace { public: int lables[4]; };
    vector<point> points_;
    vector<hexFace> hexFaces_;
};

如果可以的话,我是否也必须在这个文件中编写它的构造函数?

您可以,或者您可以选择在别处编写它,或者您可以选择完全省略用户定义的构造函数。

这是内联编写它的方法:

class surface {
public:
    class hexFace { public: hexFace() { std::cout << "inline constructor!\n" } };
}

以下是如何在外部编写它

class surface {
  public:
  class hexFace {
    public:
      hexFace();
  };

// in another file ...
surface::hexFace::hexFace() { std::cout << "extern constructor\n"; }

结构是否需要构造函数来初始化它?

classa和 a都不struct需要用户定义的构造函数,但都允许它们。

struct X {
  X() { std::cout << "in struct constructor!\n"; }
};
class Y {
  public: 
    Y() { std::cout << "in class constructor!\n"; }
};
于 2013-01-09T16:23:01.327 回答