Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该在头文件或源文件中使用构造函数实现结构吗?_C++_Struct_Constructor_Header - Fatal编程技术网

C++ 我应该在头文件或源文件中使用构造函数实现结构吗?

C++ 我应该在头文件或源文件中使用构造函数实现结构吗?,c++,struct,constructor,header,C++,Struct,Constructor,Header,好的,我正在用一个struct[在C++中]编写代码,我不确定是在头文件还是在源文件中实现这个struct 结构包括一个构造函数: struct Point { double x; double y; Point(double xCo, double yCo) { this->x = xCo; this->y = yCo; } int comparePoint(Point point) {

好的,我正在用一个struct[在C++中]编写代码,我不确定是在头文件还是在源文件中实现这个struct

结构包括一个构造函数:

struct Point
{
    double x;
    double y;

    Point(double xCo, double yCo)
    {
        this->x = xCo;
        this->y = yCo;
    }

    int comparePoint(Point point)
    {
        ...
    }
};
我在头文件中写道:

typedef struct Point point;
它足够好,还是设计不好? 正如我在一些网站上读到的,结构通常在头文件中实现

但是在我之前的一个作业中,课程的工作人员向我们提供了一个头文件,其中包括对结构的声明,而不是实现


我在这里看到了与此类似的其他问题,但它们并没有真正回答我的问题。

这个问题没有答案,这取决于具体情况。您是否关心客户机代码可以访问构造函数的实现,并且每次在那里进行更改时都必须重新编译它?如果是,请不要在标题中实现它。记住,在C++中,代码>结构> <代码>和<代码>类< /C>是等价的,因此同样的一般规则应该适用于两者。 您应该使用构造函数初始化列表:

Point(double xCo, double yCo) : x(xCo), y(yCo) {}

您可以在标头中声明构造函数,并在cpp文件中写下实现:

struct Point
{
    Point(double xCo, double yCo);
    ...
};

Point::Point(double xCo, double yCo)
{
    ...
}

但在编译器中,必须有一个声明,因为编译器依赖于构建依赖于Stutt.< /P> < P>的其他CPP文件。C++和C++中的<代码>结构> <代码>用法有很大的不同。 在C语言中,

struct
声明声明了一个带有标记的结构,而不是类型名。因此,除非在其周围添加
typedef
,否则必须通过标记将其引用为
struct Point

在C++中,<>代码>结构> <代码>是类< /C>的同义词,不同的只是默认成员可访问性(私有代码为<代码>类< /代码>,公共用于<代码>结构> <代码>。类型名称总是为<代码>结构> <代码>而没有<代码> TyPulf< /Cuff>,因此在C++中添加<代码> TyPulf< /Cuff>在C++中是不必要的。
这不会影响您声明构造函数的方式:您可以将其内联到头中,或者将其移出到实现中。不管怎样,它都会起作用。最好把简单的初始化器传递给头部中的初始化列表,而更复杂的初始化可能会在CPP文件中进行,但是完全由你来决定。

< P>考虑到C++中的结构只是一个“默认成员可访问性”的类,它被设置为公共而不是私有,我建议您对结构进行完全相同的操作,就像在编写类一样。

在C++中,TyErf是不必要的。这是一个C成语,没什么大不了的。一个区别是,如果将实现放在头文件中,那么任何函数都必须是内联的(在上面的示例代码中,它们默认是内联的)?如果我正在编写一个类,并且x,y被定义为私有的,那么我会添加get/set函数来访问x,y变量。这里有必要这样做吗?因为如果我不这样做,我会得到一个错误。@NadinHaddad:如果你的
x
y
数据成员是
public
,你就不需要get/set方法:你可以使用点表示法(或者如果你通过指针引用结构/类实例,你可以使用
->
表示法)。