C++中类定义与类实现的问题

时间:2022-08-30 00:23:09
在C++中,为什么还要分为类的声明与类的实现部分呢?

 直接在类的声明中定义不就好了吗?

我看好多代码,都是在同一文件中,声明了一个类,紧跟着在类后面再来实现,为什么这样呢

还有的代码,在类中有两个方法,其中一个方法实现了,另外一个方法还要在外头来定义,为什么

7 个解决方案

#1


因为在类中实现的成员函数是inline形式的,而类外实现的则默认不是

#2


因为c++是单文件分开编译,正确是声明和实现在不同文件。如此实现编译一次就好,不分开,就重复编译。浪费cpu和电费

#3


分离式编译的优点有很多,最主要的一个是模块可以复用
比如你写了一个类,如果你把它全放到头文件中,那可能这个类有几千行代码,而每个用到这个类的文件都要包含这个头文件,这样一来,这几千行代可以要被反复编译多次,这无疑增加了编译时间,也使得目标代码过长
而如果把类的定义和实现分开,那头文件可能就几十行,再编译的时候只有这几十行会被反复编译,而其实现文件,只要编译一次就可以了

#5


引用 3 楼 cyfcsd 的回复:
分离式编译的优点有很多,最主要的一个是模块可以复用
比如你写了一个类,如果你把它全放到头文件中,那可能这个类有几千行代码,而每个用到这个类的文件都要包含这个头文件,这样一来,这几千行代可以要被反复编译多次,这无疑增加了编译时间,也使得目标代码过长
而如果把类的定义和实现分开,那头文件可能就几十行,再编译的时候只有这几十行会被反复编译,而其实现文件,只要编译一次就可以了


学习了

#6


计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

#7


比如定义了一个类,几个不同的cpp文件都有使用到这个类,这几个cpp文件只要#include这个类的声明(头文件)就可以了(这样编译器在编译这个cpp文件单元的时候就认识这个类就能编译通过),这样做也是最简洁的。如果类的声明和定义放在一个文件,被其它cpp文件多次包含,还有可能产生重复定义等问题。

#1


因为在类中实现的成员函数是inline形式的,而类外实现的则默认不是

#2


因为c++是单文件分开编译,正确是声明和实现在不同文件。如此实现编译一次就好,不分开,就重复编译。浪费cpu和电费

#3


分离式编译的优点有很多,最主要的一个是模块可以复用
比如你写了一个类,如果你把它全放到头文件中,那可能这个类有几千行代码,而每个用到这个类的文件都要包含这个头文件,这样一来,这几千行代可以要被反复编译多次,这无疑增加了编译时间,也使得目标代码过长
而如果把类的定义和实现分开,那头文件可能就几十行,再编译的时候只有这几十行会被反复编译,而其实现文件,只要编译一次就可以了

#4


#5


引用 3 楼 cyfcsd 的回复:
分离式编译的优点有很多,最主要的一个是模块可以复用
比如你写了一个类,如果你把它全放到头文件中,那可能这个类有几千行代码,而每个用到这个类的文件都要包含这个头文件,这样一来,这几千行代可以要被反复编译多次,这无疑增加了编译时间,也使得目标代码过长
而如果把类的定义和实现分开,那头文件可能就几十行,再编译的时候只有这几十行会被反复编译,而其实现文件,只要编译一次就可以了


学习了

#6


计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

#7


比如定义了一个类,几个不同的cpp文件都有使用到这个类,这几个cpp文件只要#include这个类的声明(头文件)就可以了(这样编译器在编译这个cpp文件单元的时候就认识这个类就能编译通过),这样做也是最简洁的。如果类的声明和定义放在一个文件,被其它cpp文件多次包含,还有可能产生重复定义等问题。