2017-08-09 4 views
0

Zuerst bin ich ein Anfänger bei der Programmierung, also nicht erwarten, dass ich jedes Code-spezifische Wort zu verstehen.Wie zu organisieren umfasst umfasst in mehreren Klassen in C++

Zweitens bin ich manchmal langsam auf Aufnahme.

Drittens denke ich, ich habe die Grundlagen von C++ behandelt, aber das war's. Ich bin glücklich, mehr natürlich zu lernen!

zu meiner Frage:

ich ein wenig Code bin Programmierung mit Klassen zu erleben. Ich habe zwei Klassen erstellt, jede in einer anderen .h und .cpp Datei. Jetzt verwendet jeder die Header iostream und string.

Wie sollte ich diese ohne Probleme einbeziehen? Ist #pragma einmal ausreichend?

Zweite Frage ist etwa using namespace std: wo soll ich es sagen (ich weiß, es ist keine schlechte Nutzung aber bin nur für ein kleines Programm)

Ersten Kopfzeile:

#pragma once 

#include <iostream> 
#include <string> 

//using namespace std Nr.1 

class one 
{ 

}; 

zweiter Kopf :

#pragma once 

#include <iostream> 
#include <string> 

//using namespace std Nr.2 

class two 
{ 

}; 

Schließlich Main:

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

//using namespace std Nr.3 

int main() 
{ 
    return 1; 
}; 

Vielen Dank im Voraus für die Antwort.

+1

Sie müssen (ein Minimum) Beispielcode Ihre Erklärung Es ist unklar, was das Problem genau ist. – Drop

Antwort

-1

Sie können auch eine Kopfzeile mit allen üblichen Abhängigkeiten erstellen, die Sie benötigen, und sie in jede Klasse aufnehmen, die diese Abhängigkeiten benötigt. Hier ist ein einfaches Beispiel:

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; 
     } 

    }; 

} 

main.cav

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

int main() 
{ 

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

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

} 

Es kann Fälle geben, in denen Sie die gleichen 10+ Header in zwei verschiedenen Klassen müssen, ich glaube, dass sie in einem Header-Puting hilft Ihnen, den Code besser zu sehen. Und ja, preprocesor definiert auch gut, vergiss das nicht. (:

+0

Schlechte Idee. Dieser allgemeine Header führt Abhängigkeiten in jede Quelldatei ein, die ihn verwendet: jede Änderung in diesem Header erfordert das erneute Kompilieren ** aller ** Quellendateien, die ihn verwenden. Jede Quelldatei sollte die Header enthalten, die ** it ** benötigt. –

1

Es gibt kein Problem, zweimal Iostream und Zeichenfolge in beiden Klassenheadern ".

Die # pragma-Direktive wird verwendet, um zwei Deklarationen von Typen (typedef, classes) Ihrer eigenen Typen zu schützen.

Daher gilt es für Ihre Klassenheader '.

Darüber hinaus gibt es Nachteile mit Pragma Direktive wie hier angegeben: https://stackoverflow.com/a/1946730/8438363

I Präprozessor empfehlen definiert Wächter:

#ifndef __MY_HEADER__ 
#define __MY_HEADER__ 


//... your code here 

#endif 

Hoffnung, das hilft.

+0

Ja, Wachen einzuschließen. Nein zu dieser speziellen Form. Namen, die zwei aufeinanderfolgende unter enthalten Scores ('__MY_HEADER__') und Namen, die mit einem Unterstrich gefolgt von einem Großbuchstaben beginnen, sind für die Implementierung reserviert. Benutze sie nicht in deinem Code. –

+0

Können Sie bitte einen Link zu der Richtlinie/Regel angeben, in der die Form von include guards angegeben ist? – Theforgotten

0

Sie müssen verwenden einschliessen guards.They sorgen der Compiler enthalten jeweils „enthalten“ Header-Datei (#include „XXX.h“) nur einmal

Aber wenn Sie erstellen eine kleine Anwendung &. Es macht nichts, Ihr gesamtes Projekt neu zu kompilieren/neu aufzubauen, wenn es nötig ist, dann ist es faire Spiel & hält Code sauber

Verwandte Themen