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++ 中 structclass 之间的区别只是成员的默认可见性([=11= 私有],struct public)。

其实不只是函数,它是class/structTest.

的构造函数

在 C++ 中,structs 与 classes 基本相同,除了它们的默认保护级别:classes 默认为 privatestructs 到 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 默认情况下成员是私有的。