C++ 我应该在头文件或源文件中使用构造函数实现结构吗?
好的,我正在用一个struct[在C++中]编写代码,我不确定是在头文件还是在源文件中实现这个struct 结构包括一个构造函数: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 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++中,<>代码>结构> <代码>是这不会影响您声明构造函数的方式:您可以将其内联到头中,或者将其移出到实现中。不管怎样,它都会起作用。最好把简单的初始化器传递给头部中的初始化列表,而更复杂的初始化可能会在CPP文件中进行,但是完全由你来决定。 < P>考虑到C++中的结构只是一个“默认成员可访问性”的类,它被设置为公共而不是私有,我建议您对结构进行完全相同的操作,就像在编写类一样。在C++中,TyErf是不必要的。这是一个C成语,没什么大不了的。一个区别是,如果将实现放在头文件中,那么任何函数都必须是内联的(在上面的示例代码中,它们默认是内联的)?如果我正在编写一个类,并且x,y被定义为私有的,那么我会添加get/set函数来访问x,y变量。这里有必要这样做吗?因为如果我不这样做,我会得到一个错误。@NadinHaddad:如果你的
x
和y
数据成员是public
,你就不需要get/set方法:你可以使用点表示法(或者如果你通过指针引用结构/类实例,你可以使用->
表示法)。