在c++中,结构可以有构造函数吗?

我一直试图解决这个问题,但我没有得到语法。


当前回答

struct TestStruct {
        int id;
        TestStruct() : id(42)
        {
        }
};

其他回答

是的,在结构中有构造函数是可能的,这里有一个例子:

#include<iostream.h> 
struct a {
  int x;
  a(){x=100;}
};

int main() {
  struct a a1;
  getch();
}
struct TestStruct {
        int id;
        TestStruct() : id(42)
        {
        }
};

在c++中,类和结构之间的唯一区别是,成员和基类在类中默认是私有的,而在结构中默认是公共的。

struct可以有构造函数,语法和类一样。

以上所有答案都严格地回答了提问者的问题,但我只是想指出一个可能会遇到问题的情况。

如果你像这样声明你的结构体:

typedef struct{
int x;
foo(){};
} foo;

在尝试声明构造函数时会遇到问题。当然,这是因为你实际上并没有声明一个名为“foo”的结构体,你创建了一个匿名结构体,并给它分配了别名“foo”。这也意味着你不能在cpp文件中使用"foo"和作用域操作符:

foo。:

typedef struct{
int x;
void myFunc(int y);
} foo;

foo.cpp:

//<-- This will not work because the struct "foo" was never declared.
void foo::myFunc(int y)
{
  //do something...
}

要解决这个问题,你必须这样做:

struct foo{
int x;
foo(){};
};

或:

typedef struct foo{
int x;
foo(){};
} foo;

后者创建了一个名为“foo”的结构体,并赋予其别名“foo”,因此在引用它时不必使用struct关键字。

是的。结构就像一个类,但在类定义和继承时默认为public::

struct Foo
{
    int bar;

    Foo(void) :
    bar(0)
    {
    }
}

考虑到你的另一个问题,我建议你阅读一些教程。他们会比我们更快更全面地回答你的问题。