【问题标题】:How can I have class within struct我怎样才能在结构中上课
【发布时间】:2012-09-05 09:23:14
【问题描述】:

我有课..

class myClass
{
public:
    myClass(int time);
}

那么我需要在 struct 中有这个类。

class TopClass
{
 public:
  typedef struct{
    int myint;
    myClass myclass;
  }tStruct;

  tStruct sStruct1;
  tStruct sStruct2;

}

我该怎么做?如何调用 myClass 的构造函数? 是使用类而不是结构的唯一方法吗?

我的构造函数

TopClass::TopClass():               
        sStruct1({32, myClass(100)}),
        sStruct2({52, myClass(1000)})
{

}

但我收到错误:

扩展初始化列表仅适用于 -std=c++0x 或 -std=gnu++0x

【问题讨论】:

  • 不太清楚你在找什么。
  • 实际问题是什么?你有任何错误吗?
  • 好吧,我的帖子已被编辑...
  • 不要在 C++ 中使用typedef struct {...} name;。声明struct name {...};

标签: c++ class struct


【解决方案1】:

你可以在struct中添加构造函数:http://ideone.com/ifBw2

class TopClass
{
 public:
  struct tStruct {
    tStruct(int time, int k = 0): myint(k), myclass(time) {}
    int myint;
    myClass myclass;
  };

  TopClass(int t): sStruct1(t), sStruct2(t) {}

  tStruct sStruct1;
  tStruct sStruct2;

};

编辑

至于新问题 - 您必须使用新标准 (-std=c++0x) 这样做。在旧标准中,您必须添加显式 ctor 来初始化成员变量。 C++ 中的structclass 几乎完全相同——您可以添加ctor、成员函数、静态函数。唯一的区别是默认隐私 - struct 为公开,classprivate

class A {
public: 
  int b;
};

完全一样
struct A {
  int b; 
};

【讨论】:

  • 谢谢!也许我在找什么并不明显,但你的答案正是我想要的!
【解决方案2】:

我该怎么做?如何调用 myClass 的构造函数?

你的struct 需要一个构造函数,因为它有一个没有默认构造函数的成员。为了有一个构造函数,它还需要自己的名字,而不仅仅是一个typedef 别名。

struct tStruct {
    // If you want a default constructor:
    tStruct() : myClass(42) {}

    // If you want to specify the time:
    tStruct(int time) : myClass(time) {}

    int myint;
    myClass myclass;
};

只有使用类而不是结构的方法吗?

classstruct 的含义完全相同(除了具有不同默认访问说明符的细微差别)。你可以用一个做任何事情,你也可以用另一个做。

【讨论】:

    【解决方案3】:

    其实,Pawel Zubrycki 的回答是可以的。

    但我想知道为什么你必须这样做,你必须在 TopClass 中导入另一个类构造函数。

    我的意思是代码应该遵循高内聚低耦合的规则。 在软件构建中,我们更喜欢composition(一种重要的设计模式)而不是其中的类定义。类似于以下代码。

    class B{
    public:
        B(int y){b = y;}
    private:
        int b;
    };
    
    class A {
    public:
        A(int x):b(x){...};
    private:
        B b;
    };
    

    从代码中我们可以最大化B类,明显降低A类的复杂度。A&B可以自己改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 2020-09-25
      • 1970-01-01
      相关资源
      最近更新 更多