2017-01-09 69 views
1

我想分開.cpp文件)的長執行到單獨的文件中。只有一個類的單獨imeplementation文件(cpp文件)分成單獨的文件

例如,考慮我有10個函數裏面的所有這10個函數的內部和實現.cpp文件包含大約200行代碼。

現在,問題是如何將所有這些功能分離成單獨的文件,當他們所有人在一起做一個類。

這是通過內部報頭(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

應該沒有問題。每個cpp文件是一個**獨立的**編譯單元(即,當開始處理一個單元時,編譯器將「忘記從前一單元中知道的所有東西」)。 –

+3

這就是頭文件及其類定義的用途。 –

+2

有一點需要考慮,如果你的類函數定義佔用了太多的空間以至於需要將它們分離出來,那麼你的類可能會做得太多。 – RyanP

回答

0

只要你在這些.cpp文件中包含你的.h文件和將它們全部鏈接到你的Makefile文件中,在許多.cpp文件中分開執行是沒有問題的。

1

問題是如何將所有這些功能分離成單獨的文件,當他們所有人在一起做一個類。

在完全相同的方式,你(大概)已經sperate不同類別的功能集成到單獨的文件:

  1. 創建一個源文件。
  2. 定義0到n個函數(從0到m類或自由函數)。
  3. 包含所有必需的標題,以便包含定義函數所依賴的聲明/定義。
  4. 如果定義了所有功能,就完成了。否則跳轉到1.

成員函數不需要在同一個源文件中,而不同類的函數不需要在單獨的源文件中。這只是一個常見的慣例。

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」中聲明的。

但首先,檢查是否不需要在不同的類中打破該類,而不是打破實現。

+0

感謝您的幫助。然後,我必須再次檢查它,因爲我以同樣的方式執行了操作並且沒有工作! – BugReader

+0

它不工作的方式?編譯錯誤?鏈接錯誤? – Gonmator

+0

我將類的頭文件包含到函數中,但它無法知道在類的.cpp文件中實現的另一個函數。現在,我正在嘗試更改我的代碼以再次檢查它。 – BugReader