在c++中,结构可以有构造函数吗?
我一直试图解决这个问题,但我没有得到语法。
在c++中,结构可以有构造函数吗?
我一直试图解决这个问题,但我没有得到语法。
当前回答
语法与c++中的类是一样的。如果你知道在c++中创建构造函数,那么在struct中也是一样的。
struct Date
{
int day;
Date(int d)
{
day = d;
}
void printDay()
{
cout << "day " << day << endl;
}
};
Struct在c++中可以把所有东西都作为类。如前所述,区别只是默认情况下c++成员具有私有访问权限,但在结构中它是公共访问权限。但是根据编程考虑,对于仅数据结构使用struct关键字。对于同时具有数据和函数的对象使用class关键字。
其他回答
在c++中,我们可以像类一样声明/定义结构,并拥有结构的构造函数/析构函数,并在其中定义变量/函数。 唯一的区别是定义的变量/函数的默认作用域。 除了上述差异之外,大多数情况下,您应该能够使用结构来模仿类的功能。
struct HaveSome
{
int fun;
HaveSome()
{
fun = 69;
}
};
我宁愿在构造函数中初始化,这样就不需要保持顺序。
是的,但是如果你在工会中有你的结构,那么你就不能。它和类是一样的。
struct Example
{
unsigned int mTest;
Example()
{
}
};
工会将不允许在结构中使用构造函数。你可以在联合上创建一个构造函数。这个问题与联合中的非平凡构造函数有关。
以上所有答案都严格地回答了提问者的问题,但我只是想指出一个可能会遇到问题的情况。
如果你像这样声明你的结构体:
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关键字。
是的,在结构中有构造函数是可能的,这里有一个例子:
#include<iostream.h>
struct a {
int x;
a(){x=100;}
};
int main() {
struct a a1;
getch();
}