C++ 将类划分为定义和实现不是纯粹为了编译时的目的吗?

C++ 将类划分为定义和实现不是纯粹为了编译时的目的吗?,c++,C++,通常,我发现在头文件和实现文件中定义内容更麻烦,而在头文件中编写实现也可以。通常采用这种方式的原因是什么?实际原因:减少编译时间,帮助编译器,能够将接口与实现分离,从而创建共享/动态库,可以在不重新编译原始程序的情况下切换到不同版本 实际原因:常识。实际原因:减少编译时间、帮助编译器、将接口与实现分离的能力,从而创建共享/动态库,无需重新编译原始程序即可切换到不同版本 实际原因:常识。单独编译是一个大问题。当您有数百到数千个cpp文件时,时间开始累积。如果所有内容都是在头中实现的,那么每次单个类

通常,我发现在头文件和实现文件中定义内容更麻烦,而在头文件中编写实现也可以。通常采用这种方式的原因是什么?

实际原因:减少编译时间,帮助编译器,能够将接口与实现分离,从而创建共享/动态库,可以在不重新编译原始程序的情况下切换到不同版本


实际原因:常识。

实际原因:减少编译时间、帮助编译器、将接口与实现分离的能力,从而创建共享/动态库,无需重新编译原始程序即可切换到不同版本


实际原因:常识。

单独编译是一个大问题。当您有数百到数千个cpp文件时,时间开始累积。如果所有内容都是在头中实现的,那么每次单个类更改任何内容时,都必须进行完整的重新编译


另一个是设计/文档透视图。类的用户应该能够以简洁的方式从头文件中获取所需的所有信息,而不必查看实现

单独编译是个大问题。当您有数百到数千个cpp文件时,时间开始累积。如果所有内容都是在头中实现的,那么每次单个类更改任何内容时,都必须进行完整的重新编译


另一个是设计/文档透视图。类的用户应该能够以简洁的方式从头文件中获取所需的所有信息,而不必查看实现

你说得对,它很麻烦,而且很明显,现在有一种趋势是将所有内容都放在头文件中,这可能是因为人们使用Java和C之类的语言,而你在一个位置声明和实现

然而,C++编译模型比这些语言复杂得多,并且包含的本质意味着编译器必须打开、预处理和解析每个包含的文件。这可能是一个大型项目的巨大成功。由于方法的实现倾向于改变更多的类声明,您希望最小化重新编译的量,因此编译器必须这样做,您需要改变一个方法。通过将代码放入.cpp文件,只需重新编译即可。如果将其放入头文件中,则必须重新生成包含该头文件的每个文件


如果在开发过程中向类添加新方法,则无法避免受到重建的影响。但是,如果您使用该模式添加成员变量,您可以避免受到影响。

您是对的,它很麻烦,而且很明显,现在有一种趋势是将所有内容都放在头文件中,这可能是因为人们使用Java和C等语言,您在一个位置声明和实现

然而,C++编译模型比这些语言复杂得多,并且包含的本质意味着编译器必须打开、预处理和解析每个包含的文件。这可能是一个大型项目的巨大成功。由于方法的实现倾向于改变更多的类声明,您希望最小化重新编译的量,因此编译器必须这样做,您需要改变一个方法。通过将代码放入.cpp文件,只需重新编译即可。如果将其放入头文件中,则必须重新生成包含该头文件的每个文件


如果在开发过程中向类添加新方法,则无法避免受到重建的影响。但是,如果您使用该模式添加成员变量,则可以避免受到影响。

这样将接口与实现分离可能而且通常非常有用,特别是从简单的管理角度来看,在大型项目中

编写指定接口的标题,可以编写项目的其他部分,就好像该组件已经完成一样,即使它还没有实际实现。在典型情况下,您可能会编写一个头,然后稍后编写一个简单的模拟实现,例如,它只是返回操作失败,而没有实际执行任何操作,直到稍后仍然编写一个真正的实现,尝试执行任何有用的操作


显然,在您至少拥有一个模拟实现之前,代码不会链接,但是代码的其他部分至少可以使用一个头进行编译。

这样将接口与实现分离是非常有用的,而且通常是非常有用的,尤其是从简单的管理角度来看,在大型项目中

编写指定接口的标题,可以编写项目的其他部分,就好像该组件是完整的一样,即使是完整的 它还没有真正实现。在典型情况下,您可能会编写一个头,然后稍后编写一个简单的模拟实现,例如,它只是返回操作失败,而没有实际执行任何操作,直到稍后仍然编写一个真正的实现,尝试执行任何有用的操作


显然,在您至少拥有一个模拟实现之前,代码不会链接,但代码的其他部分至少可以使用一个头进行编译。

要在头和实现文件中定义内容,请在头中声明,然后在cpp文件中定义。但是没有什么能阻止你把所有的东西都包括进去,因为你的机器有足够的ram…@Plasmah技术上来说,你在头文件中定义了一个类,并在典型情况下在源文件中定义其成员函数。@Angew:通常在定义的头文件中声明成员函数,并在cpp文件中定义它们。但是,很多人把类说明符称为类定义,所以这里是一个例外,在头文件中,但是在CPP文件中没有任何贡献。实际上,不管你怎么看它,管理标题/源都是非常恼人的C++。如果没有舒适的IDE,你会花很多时间在它上面,而且显然缺乏好的IDE。不过,我们已经对模块系统进行了一些开发,所以也许事情会变得更好。@Plasmah class X{::};是类X的定义,其中包含其成员的声明和/或定义。若要在头文件和实现文件中定义内容,请在头文件中声明,然后在cpp文件中定义。但是没有什么能阻止你把所有的东西都包括进去,因为你的机器有足够的ram…@Plasmah技术上来说,你在头文件中定义了一个类,并在典型情况下在源文件中定义其成员函数。@Angew:通常在定义的头文件中声明成员函数,并在cpp文件中定义它们。但是,很多人把类说明符称为类定义,所以这里是一个例外,在头文件中,但是在CPP文件中没有任何贡献。实际上,不管你怎么看它,管理标题/源都是非常恼人的C++。如果没有舒适的IDE,你会花很多时间在它上面,而且显然缺乏好的IDE。不过,我们已经对模块系统进行了一些开发,所以也许事情会变得更好。@Plasmah class X{::};是类X的定义,其中包含其成员的声明和/或定义。我不知道编译时间今天仍然是一个问题,但我可以理解为什么有大量的类/子类。非常感谢你为我指出了一些显而易见的原因非常感谢。@Silverback Lightness Races in Orbit的答案讨论共享库也是我忽略的一个要点。我不知道编译时间在今天仍然是一个问题,但我可以理解为什么有大量的类/子类。非常感谢你为我指出了一些显而易见的原因非常感谢。@Silverback Lightness Races in Orbit的答案讨论共享库也是我忽略的一个要点。现在我们想谈谈Java…:@克尼维尔:不,我们真的不会。。。!现在我们想谈谈Java…:@克尼维尔:不,我们真的不会。。。!