C++ C+中的结构构造函数+;?
可以在C++中使用构造函数< /p>C++ C+中的结构构造函数+;?,c++,struct,constructor,C++,Struct,Constructor,可以在C++中使用构造函数< /p> 我一直在尝试解决这个问题,但我没有得到语法。C++中的< P> > 类< /COD>和结构>代码>,默认情况下,成员和基类在类中是私有的,而在结构中默认为公共的。p> struct TestStruct { int id; TestStruct() : id(42) { } }; 因此结构可以有构造函数,语法与类相同。是。结构与类类似,但在类定义中和继承时默认为public:: struct
我一直在尝试解决这个问题,但我没有得到语法。C++中的
< P> > <代码>类< /COD>和struct TestStruct {
int id;
TestStruct() : id(42)
{
}
};
因此结构可以有构造函数,语法与类相同。是。结构与类类似,但在类定义中和继承时默认为
public:
:
struct Foo
{
int bar;
Foo(void) :
bar(0)
{
}
}
考虑到你的另一个问题,我建议你通读一遍。他们会比我们更快更快地回答你的问题。 < P>是,C++中的结构和类是相同的,除了默认情况下结构成员是公共的,而默认情况下类成员是私有的。在类中可以做的任何事情都应该能够在结构中完成
struct Foo
{
Foo()
{
// Initialize Foo
}
};
是的,但是如果你有一个联盟的结构,那么你就不能。它和一门课是一样的
struct Example
{
unsigned int mTest;
Example()
{
}
};
联合不允许在结构中使用构造函数。不过,您可以在联合体上创建构造函数在C++中,我们可以声明类类结构,定义结构的构造函数和析构函数,并在其中定义变量/函数。 唯一的区别是定义的变量/函数的默认范围。 除了上面的区别之外,大多数情况下,您应该能够使用结构模拟类的功能
struct HaveSome
{
int fun;
HaveSome()
{
fun = 69;
}
};
我宁愿在构造函数内部初始化,这样我就不需要保持顺序。是的,在结构中有构造函数是可能的。下面是一个示例:
#include<iostream.h>
struct a {
int x;
a(){x=100;}
};
int main() {
struct a a1;
getch();
}
#包括
结构a{
int x;
a(){x=100;}
};
int main(){
结构a1;
getch();
}
以上所有答案从技术上回答了提问者的问题,但我只是想指出一个你可能会遇到问题的案例
如果您这样声明结构:
typedef struct{
int x;
foo(){};
} foo;
MYSTRUCT _pointList[] = {
{ 1, 1.0, 1.0 },
{ 2, 1.0, 2.0 },
{ 3, 2.0, 1.0 }
};
您在尝试声明构造函数时会遇到问题。当然,这是因为您实际上没有声明名为“foo”的结构,而是创建了一个匿名结构,并为其指定了别名“foo”。这也意味着您将无法将“foo”与cpp文件中的作用域运算符一起使用:
foo.h:
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...
}
或者这个:
typedef struct foo{
int x;
foo(){};
} foo;
其中创建了一个名为“FO”的结构,并赋予它别名“FO”,这样当引用它时,就不必使用<代码>结构> /COD>关键字。
< P>,正如其他答案所提到的,结构基本上被视为C++中的类。这允许您拥有一个构造函数,该构造函数可用于使用默认值初始化结构。下面,构造函数将sz
和b
作为参数,并将其他变量初始化为一些默认值
struct blocknode
{
unsigned int bsize;
bool free;
unsigned char *bptr;
blocknode *next;
blocknode *prev;
blocknode(unsigned int sz, unsigned char *b, bool f = true,
blocknode *p = 0, blocknode *n = 0) :
bsize(sz), free(f), bptr(b), prev(p), next(n) {}
};
用法:
unsigned char *bptr = new unsigned char[1024];
blocknode *fblock = new blocknode(1024, btpr);
< C++ >代码> >结构> <代码> <代码>类<代码>,除<代码>结构> <代码>默认成员访问说明符>代码>公用< /Cl> >类>代码>私下< /代码> .< <> >在C++中,使用<代码>结构> <代码>的原因是C++的超集,必须与代码<向后兼容>遗留C类型< /C> > < /P>
例如,如果语言用户试图在C++代码中包含一些C头文件<代码> LeCACY-C.H./Cuth>,它包含“代码>结构测试{INTX,Y};<代码>。<代码>结构测试< /代码>的成员应该是可访问的,就像C.
注意到有一个有趣的区别(至少是MS+C++编译器):
如果你有这样一个普通的结构
struct MyStruct {
int id;
double x;
double y;
} MYSTRUCT;
然后,您可以在其他地方初始化这样的对象数组:
typedef struct{
int x;
foo(){};
} foo;
MYSTRUCT _pointList[] = {
{ 1, 1.0, 1.0 },
{ 2, 1.0, 2.0 },
{ 3, 2.0, 1.0 }
};
但是,只要您向MyStruct添加用户定义的构造函数(如上面讨论的构造函数),就会出现如下错误:
typedef struct{
int x;
foo(){};
} foo;
MYSTRUCT _pointList[] = {
{ 1, 1.0, 1.0 },
{ 2, 1.0, 2.0 },
{ 3, 2.0, 1.0 }
};
“MyStruct”:不聚合具有用户定义构造函数的类型
:错误C2552:“\u点列表”:无法使用非聚合
可以使用初始值设定项列表初始化。
这就是结构和类之间的另一个区别。这种初始化可能不是好的OO实践,但它在我支持的遗留WiSDK C++代码中到处可见。正如您所知,c++struct和c++class中的…在默认情况下只有一个区别,结构成员是公共的,类成员是私有的
/*Here, C++ program constructor in struct*/
#include <iostream>
using namespace std;
struct hello
{
public: //by default also it is public
hello();
~hello();
};
hello::hello()
{
cout<<"calling constructor...!"<<endl;
}
hello::~hello()
{
cout<<"calling destructor...!"<<endl;
}
int main()
{
hello obj; //creating a hello obj, calling hello constructor and destructor
return 0;
}
<代码> /*这里,C++中的C++程序构造函数*/*
#包括
使用名称空间std;
结构你好
{
public://默认情况下,它也是公共的
你好;
~hello();
};
你好::你好()
{
CUT
语法与C++类一样,如果你意识到C++中构造了构造函数,那么在Stut.
中也同样如此。 结构日期 { 国际日; 日期(int d) { d=d; } 作废打印日() {不能再举一个示例,但在构造函数中设置值时使用此关键字:
#include <iostream>
using namespace std;
struct Node {
int value;
Node(int value) {
this->value = value;
}
void print()
{
cout << this->value << endl;
}
};
int main() {
Node n = Node(10);
n.print();
return 0;
}
#包括
使用名称空间std;
结构节点{
int值;
节点(int值){
这个->值=值;
}
作废打印()
{
cout value下表简要说明了类别、结构和联合
当派生自:)@sth时,该结构将默认为public。您对结构和类之间的区别有权评论,但我认为他有一个编译问题。这个问题可能是因为使用该结构的联合体。联合体中不能有非平凡的构造函数。@Chap:如果他有具体问题在通用解决方案不起作用之前,发布一些显示问题和生成的编译器错误的代码可能是最好的主意。但是,尽管问题是一般性的,但我认为人们不能对OP试图解决的具体问题推断太多…@GMan:正确的想法,错误的措辞。struct默认情况下,code>公开继承它的基类;从结构派生的类没有任何更改