2017-08-09 152 views
0

首先,我是編程的初學者,所以不要指望我理解每個特定於代碼的單詞。如何組織包括包含在C++中的多個類中

第二我有時在攝取緩慢。

第三我認爲我涵蓋了C++的基礎知識,但就是這樣。我很高興當然學到更多!

我的問題:

我編寫一些代碼,帶班體驗。我做了兩個類,每個類都有一個不同的.h和.cpp文件。現在每個人都使用標題iostreamstring

我應該如何包含那些沒有任何問題?是否#pragma曾經足夠?

第二個問題是關於using namespace std: 我應該在哪裏把它(我知道這是不是一個壞的使用,但只北京時間對於小PROGRAMM)

第一個標題:

#pragma once 

#include <iostream> 
#include <string> 

//using namespace std Nr.1 

class one 
{ 

}; 

第二高位:

#pragma once 

#include <iostream> 
#include <string> 

//using namespace std Nr.2 

class two 
{ 

}; 

最後主營:

#include "one.h" 
#include "two.h" 

//using namespace std Nr.3 

int main() 
{ 
    return 1; 
}; 

預先感謝您的回覆。

+1

您需要提供(最小)示例代碼。你的解釋是不清楚究竟是什麼問題 – Drop

回答

-1

你也可以用你需要的所有常見依賴項製作一個頭文件,並將它包含在每個需要這些依賴項的類中。下面是一個簡單的例子:

Core.h

#include <iostream> 
#include <string> 
// include most common headers 

using namespace std; 

One.h

#pragma once 
#include "Core.h" 
// if you need a header only for this class, put it here 
// if you need a header in mutiple classes, put in Core.h 

namespace one { 

    class One 
    { 
    public: 

     One(); 
     ~One(); 

     void sumFromFirstNamespace(string firsNumber, string secondNumber) 
     { 
      //convert string to int 
      int first = stoi(firsNumber); 
      int second = stoi(secondNumber); 

      int result = first + second; 

      cout << result << endl; 
     } 
    }; 

} 

Two.h

#pragma once 
#include "Core.h" 
// if you need a header only for this class, put it here 
// if you need a header in mutiple classes, put in Core.h 

namespace two{ 
    class Two 
    { 
    public: 
     Two(); 
     ~Two(); 

     void sumFromSecondtNamespace(string firsNumber, string secondNumber) 
     { 
      //convert string to int 
      int first = stoi(firsNumber); 
      int second = stoi(secondNumber); 

      int result = first + second; 

      cout << result << endl; 
     } 

    }; 

} 

主。CPP

#include "One.h" 
#include "Two.h" 

int main() 
{ 

    one::One firstClass; 
    two::Two secondClass; 

    firstClass.sumFromFirstNamespace("10", "20"); 
    secondClass.sumFromSecondtNamespace("20", "30"); 

} 

可以有你需要在兩個不同的類相同10+頭的情況下,我認爲,在一個頭puting他們可以幫助你看到的代碼更好。 是的,preprocesor定義也很好,不要忘記。 (:

+0

壞主意。該通用頭文件在每個使用它的源文件中引入了依賴關係:該頭文件中的任何更改都需要重新編譯**每個使用它的源文件。每個源文件都應該包含** **需要的頭文件。 –

1

沒有問題,包括在兩個類頭兩次iostream和字符串'。

#pragma指令用於保護您自己類型的兩個類型聲明(typedef,classes)。

因此它適用於你的類頭'。

此外,也有使用#pragma指令缺點說這裏:https://stackoverflow.com/a/1946730/8438363

我建議使用預處理器定義衛士:

#ifndef __MY_HEADER__ 
#define __MY_HEADER__ 


//... your code here 

#endif 

希望這有助於。

+0

是的,包括守衛,不是這個特殊的形式,包含兩個連續的名字分數('__MY_HEADER__')和以下劃線開頭且以大寫字母開頭的名稱被保留供實施使用。不要在你的代碼中使用它們。 –

+0

你能否提供一個鏈接指向包含警衛形式的指導方針/規則? – Theforgotten

0

您將需要使用包括guards.They確保編譯器包括每個「包括」頭文件(#包括「XXX.h」)只有一次

但是,如果你正在創建一個小的應用程序&。如果需要的話,不要介意重新編譯/重新構建整個項目,然後將公共頭文件放在專用頭文件中是公平的遊戲&保持代碼清潔&很小