Nad*_*dad 5 c++ constructor struct header
好吧,我正在编写带有struct [在C++中]的代码,我不确定是在头文件还是源文件中实现struct.
该struct包含一个构造函数:
struct Point
{
double x;
double y;
Point(double xCo, double yCo)
{
this->x = xCo;
this->y = yCo;
}
int comparePoint(Point point)
{
...
}
};
Run Code Online (Sandbox Code Playgroud)
我在头文件中写道:
typedef struct Point point;
Run Code Online (Sandbox Code Playgroud)
它足够好,还是一个糟糕的设计?正如我在一些网站上看到的那样,结构通常在头文件中实现,
但在之前的作业中,我[在C]课程的工作人员为我们提供了一个头文件,其中包括对结构的声明而不是实现.
我在这里看到了与此类似的其他问题,但他们并没有真正回答我的问题.
Pav*_*nev 11
您可以在标题中声明构造函数并在 cpp 文件中写下实现:
struct Point
{
Point(double xCo, double yCo);
...
};
Point::Point(double xCo, double yCo)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是头文件中必须有一个声明,因为编译器依赖它来构建依赖于该结构的其他 cpp 文件。
structC和C++的使用情况有很大差异.
在C中,struct声明声明一个带有标记的结构,而不是类型名称.因此,struct Point除非您在其typedef周围添加,否则必须按标记引用它.
在C++中,struct是一个同义词class,仅在默认成员可访问性(private for class,public for struct)中有所不同.A型的名字总是为所定义的struct不带typedef,所以增加了typedef周围的struct在C++中是不必要的.
这不会影响您声明构造函数的方式:您可以在标题中内联它,或将其移出到实现中.无论哪种方式它都会起作用.将args传递给头文件中的初始化列表的简单初始化程序可能更好,而更复杂的初始化应该放在cpp文件中,但这完全取决于你.
对此没有答案,这实际上取决于具体情况.您是否关心客户端代码是否可以访问构造函数的实现,并且每次进行更改时都必须重新编译它?如果是这样,请不要在标题中实现它.请记住,在这种情况下,在C++中struct并且class是等价的,因此相同的一般规则应该适用于两者.
你应该做的是使用构造函数初始化列表:
Point(double xCo, double yCo) : x(xCo), y(yCo) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16494 次 |
| 最近记录: |