C ++:为该struct之外的struct编写函数?

时间:2015-01-13 12:42:18

标签: c++ struct

对于课程,你可以说:

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结构调用?

4 个答案:

答案 0 :(得分:2)

同样的方式。 C ++中structclass之间的差异只是成员的默认可见性(class为私有,struct为public)。

实际上,它不仅仅是功能,它是class / struct Test的构造函数。

答案 1 :(得分:0)

在C ++中,structclass es基本相同,但默认保护级别除外:class默认为privatestruct 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成员默认是公共的。班级成员默认是私人的。