对于课程,你可以说:
class Test{
int a;
Test(int a);
}
Test::Test(int a) {
this->a=a;
}
函数名称得到" classname ::"在课外宣布时,在他们面前。
我如何为结构做这个?
struct Test {
int a;
Test(int a);
}
如何在struct声明之外编写此struct test的函数,以便它只能由Test结构调用?
答案 0 :(得分:2)
同样的方式。 C ++中struct
和class
之间的差异只是成员的默认可见性(class
为私有,struct
为public)。
实际上,它不仅仅是功能,它是class
/ struct
Test
的构造函数。
答案 1 :(得分:0)
在C ++中,struct
与class
es基本相同,但默认保护级别除外:class
默认为private
,struct
s到public
。要在struct
之外定义该函数,以便只能从成员调用它,将其声明为私有,然后将其定义为正常:
struct Test {
private:
int a;
Test(int a);
};
Test::Test(int a) {
this->a=a;
}
此外,您应该使用初始化列表,而不是像这样修改构造函数体中的a
成员。这将在实例完全构造之前设置成员的值。仅仅int
并不是那么重要,但这是一个很好的做法。
struct Test {
private:
Test(int a) : a(a) {}
int a;
};
答案 2 :(得分:0)
如何在struct declaration
之外编写此struct test的函数
完全按照你为第一个做的。无论您使用class
还是struct
关键字来介绍它们,都是类类型。
唯一的区别是成员和基类的默认可访问性:如果您使用class
则为private;如果您使用struct
则为public。
这样它只能由Test结构调用吗?
如果你的意思是你希望它是私有的(就像在第一个例子中那样),那么你必须明确地这样做,因为可访问性默认为public:
struct Test {
int a;
private:
Test(int a);
};
就个人而言,如果有任何非公开的话,我会使用更传统的class
。
答案 3 :(得分:0)
ForEveR是对的。就像在问题中你可以有一个结构成员定义如下:
struct Test{
int a;
Test(int a);
};
Test::Test(int a) {
this->a=a;
}
请注意,struct成员默认是公共的。班级成员默认是私人的。