C++:为该结构之外的结构编写函数?
C++: writing a function for a struct outside that struct?
对于 classes,你可以说:
class Test{
int a;
Test(int a);
}
Test::Test(int a) {
this->a=a;
}
在 class.
外部声明时,函数名称会在它们前面得到 "classname::"
我如何为结构做这个?
struct Test {
int a;
Test(int a);
}
如何在结构声明之外为这个结构测试编写函数,以便它只能由测试结构调用?
同理。 C++ 中 struct
和 class
之间的区别只是成员的默认可见性([=11= 私有],struct
public)。
其实不只是函数,它是class
/struct
Test
.
的构造函数
在 C++ 中,struct
s 与 class
es 基本相同,除了它们的默认保护级别:class
es 默认为 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;
};
How would I write the function for this struct Test outside of struct declaration
完全按照你第一次做的那样做。都是class类型,不管你用class
还是struct
关键字来介绍。
唯一的区别是成员和基础 classes 的默认可访问性:如果使用 class
,则为私有;如果使用 struct
,则为 public。
so that it can be only be called by a Test struct?
如果您的意思是希望它是私有的(如第一个示例中所示),那么您必须明确地这样做,因为可访问性默认为 public:
struct Test {
int a;
private:
Test(int a);
};
就个人而言,如果有任何非 public 的东西,我会使用更传统的 class
。
ForEveR 是对的。就像在问题中一样,您可以定义一个结构成员,如:
struct Test{
int a;
Test(int a);
};
Test::Test(int a) {
this->a=a;
}
请注意,结构成员默认为 public。 class 默认情况下成员是私有的。
对于 classes,你可以说:
class Test{
int a;
Test(int a);
}
Test::Test(int a) {
this->a=a;
}
在 class.
外部声明时,函数名称会在它们前面得到 "classname::"我如何为结构做这个?
struct Test {
int a;
Test(int a);
}
如何在结构声明之外为这个结构测试编写函数,以便它只能由测试结构调用?
同理。 C++ 中 struct
和 class
之间的区别只是成员的默认可见性([=11= 私有],struct
public)。
其实不只是函数,它是class
/struct
Test
.
在 C++ 中,struct
s 与 class
es 基本相同,除了它们的默认保护级别:class
es 默认为 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;
};
How would I write the function for this struct Test outside of struct declaration
完全按照你第一次做的那样做。都是class类型,不管你用class
还是struct
关键字来介绍。
唯一的区别是成员和基础 classes 的默认可访问性:如果使用 class
,则为私有;如果使用 struct
,则为 public。
so that it can be only be called by a Test struct?
如果您的意思是希望它是私有的(如第一个示例中所示),那么您必须明确地这样做,因为可访问性默认为 public:
struct Test {
int a;
private:
Test(int a);
};
就个人而言,如果有任何非 public 的东西,我会使用更传统的 class
。
ForEveR 是对的。就像在问题中一样,您可以定义一个结构成员,如:
struct Test{
int a;
Test(int a);
};
Test::Test(int a) {
this->a=a;
}
请注意,结构成员默认为 public。 class 默认情况下成员是私有的。