将只有一个类的imeplementation文件(cpp文件)分成单独的文件

时间:2017-01-09 14:31:15

标签: c++ class header

我想将 .cpp文件)的长实现分开到单独的文件中。

例如,考虑我在类中有10个函数,并且.cpp文件中所有这10个函数的实现包含大约200行代码。

现在,问题是当所有这些函数一起创建一个类时,如何将所有这些函数分成单独的文件。

这是header(classA.h)文件中的代码示例:

Class A{

       A(); 
       ~A();  
       double add(double a1, double a2); 
       double subtract(double a1, double a2); 
       double multiply(double a1, double a2); 
       double divide(double a1, double a2); 
}

相应的.cpp文件是:

#include "classA.h"

double A::add(double a1, double a2){
// around 5 lines of code
subtract(a1, a2); // **add also calls subtract function**
} 

double A::subtract(double a1, double a2){
// around 5 lines of code
} 

double A::multiply(double a1, double a2){
// around 5 lines of code
} 

double A::divide(double a1, double a2){
// around 5 lines of code
}

现在,假设我想将此.cpp文件分隔为单独的文件,例如“add.cpp”,...所有这些文件都在实现类的功能。

将这些函数分成单独的文件的问题是他们不知道类函数! (但是,我将类的.h文件包含在文件中!)

您有什么建议?

3 个答案:

答案 0 :(得分:3)

在不同的源文件中分离函数实现没有任何问题,即使它们属于同一个类:

文件 classA_add.cpp

#include "classA.h"

double A::add(double a1, double a2){
// around 5 lines of code
subtract(a1, a2); // **add also calls subtract function**
} 

文件 classA_substract.cpp

#include "classA.h"

double A::subtract(double a1, double a2){
// around 5 lines of code
} 

文件 classA_multiply.cpp

#include "classA.h"

double A::multiply(double a1, double a2){
// around 5 lines of code
} 

文件 classA_divide.cpp

#include "classA.h"

double A::divide(double a1, double a2){
// around 5 lines of code
}

所有这些.cpp文件都知道该类的接口,因为它在“classA.h”中声明。

但首先,检查你是否不需要在不同的类中打破该类而不是破坏实现。

答案 1 :(得分:1)

  

问题是当所有这些函数一起创建一个类时,如何将所有这些函数分成单独的文件。

与您(可能)已经将不同类的函数分配到单独的文件中的方式完全相同:

  1. 创建源文件。
  2. 定义0到n个函数(从0到m类,或自由函数)。
  3. 包含所有必需的标题,以便包含所定义函数所依赖的声明/定义。
  4. 如果定义了所有功能,您就完成了。否则跳到1。
  5. 成员函数绝不需要在同一个源文件中,并且不需要将来自不同类的函数放在单独的源文件中。这只是一个普遍的惯例。

答案 2 :(得分:0)

只要你在每个.cpp文件中#include你的.h文件,并且将它们全部链接在你的Makefile 中,就可以在许多.cpp文件中单独执行。< / p>