#includes in header auslagern / nur einmal schreiben



  • Die Typpraefixe hab ich mir nicht ausgesucht.

    if (dGlobaleZeit-p_dTimeCount)

    Es geht um die Zeile. Sobald dGlobaleZeit >= 1 wird, geht er in die if Schleife rein. Vorher geht er in das else. p_dTimeCount ist definitv 0. Beide sind vom Typ double. Meine Vermutung ist, dass irgendeine Art von abrundendem Typecast geschieht (macht es nen int draus und prüft dann erst?). Ich häng aber noch den ganzen Code hinten an.

    Habs auch mal damit probiert, aber erst wenn dGlobaleZeit 1 wird, ist die Bedingung erfüllt ...
    if (double test=dGlobaleZeit-p_dTimeCount>0)

    Gesamter Code:

    //multi_rotae.h
    #ifndef multirotae
    #define multirotae
    #include <string>
    
    class multi_rotae
    {
    private:
    	std::string p_sName;
    	unsigned int p_uiID;
    	double p_dMaxSpeed;
    	double p_dKMCount;
    	double p_dTimeCount;
    	double p_dCount;
    	multi_rotae(multi_rotae&);
    	static unsigned int p_uiMaxID;						
    	void vInitialisierung();
    
    public:
    
    	multi_rotae(void);
    	multi_rotae(std::string p_sName);
    	multi_rotae(std::string p_sName, double p_MaxSpeed);
    	virtual ~multi_rotae(void);
    	void vAusgabe();
    	void vAbfertigung();
    };
    #endif //multirotae
    
    //main.cpp
    
    #include <string>
    #include <iostream>
    #include <iomanip>
    
    #include "multi_rotae.h"
    
    //namespace std:
    using ::std::endl;
    using ::std::cout;
    using ::std::cin;
    using ::std::string;
    using ::std::setiosflags;
    using ::std::ios;
    using ::std::setw;
    
    //namespace std end -- no more includes after this!!
    
    double dGlobaleZeit=0.0;
    
    void vAufgabe1();
    
    void main(){
    
    vAufgabe1();
    
    }
    
    void vAufgabe1(){
    multi_rotae vehikel1("audo1", 50.5);
    multi_rotae vehikel2;
    string s_Name_vehikel3;
    cout << "Fahrzeugnamen eingeben" << '\n';
    cin >> s_Name_vehikel3;
    multi_rotae *vehikel3 = new multi_rotae(s_Name_vehikel3);
    cout << setiosflags(ios::left) << setw(5) << "ID" << setw(10) << "Name" << setw(5) << ':' << setw(10) << "MaxSpeed" << setw(20) << 
    	"GesamtStrecke" <<"\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
    for(int i=1; i<10; i++){
    	dGlobaleZeit+=i/5;
    
    	vehikel3->vAbfertigung();
    	vehikel2.vAbfertigung();
    	vehikel1.vAbfertigung();
    	vehikel3->vAusgabe();
    	vehikel2.vAusgabe();
    	vehikel1.vAusgabe();
    }
    delete vehikel3; 
    return;
    }
    
    //multi_rotae.cpp
    
    #include <string>
    #include <iostream>
    #include <iomanip>
    
    #include "multi_rotae.h"
    
    //namespace std:
    using ::std::endl;
    using ::std::cout;
    using ::std::string;
    using ::std::setw;
    using ::std::cerr;
    
    //namespace std end -- no more includes after this!!
    
    unsigned int multi_rotae::p_uiMaxID=0;
    
    void multi_rotae::vInitialisierung(void){
    	p_dMaxSpeed=0;
    	p_dKMCount=0;
    	p_dTimeCount=0;
    	p_dCount=0;
    	p_uiID=++p_uiMaxID;
    	p_sName="";
    }
    
    multi_rotae::multi_rotae(void)
    {
    	vInitialisierung();
    	cout << "born: " << p_sName << '\n';
    	cout << "id: " << p_uiID << endl;
    
    }
    
    multi_rotae::multi_rotae(string itself, double dMaxSpit)
    {
    	vInitialisierung();
    	p_dMaxSpeed=dMaxSpit;
    	p_sName=itself;
    	cout << "born: " << p_sName << '\n';
    	cout << "id: " << p_uiID << endl;
    
    }
    
    multi_rotae::multi_rotae(string itself)	{
    	vInitialisierung();
    	p_sName=itself;
    	cout << "born: " << p_sName << '\n';
    	cout << "id: " << p_uiID << '\n';
    	cout << "Highest Speed: " << p_dMaxSpeed << endl;
    
    }
    
    multi_rotae::~multi_rotae(void)
    {
    	cout << "trashed: " << p_sName << '\n';
    	cout << "id: " << p_uiID << '\n';
    	cout << "Highest Speed: " << p_dMaxSpeed << endl;
    
    }
    
    void multi_rotae::vAusgabe(){
    
    	cout << setw(5) << p_uiID << setw(10) << p_sName << setw(5) << ':' << setw(15) << p_dMaxSpeed << setw(15) << p_dKMCount << endl;
    
    }
    
    void multi_rotae::vAbfertigung(){
    	extern double dGlobaleZeit;
    	if (dGlobaleZeit-p_dTimeCount){
    		double dVergZeit=dGlobaleZeit-p_dTimeCount;
    		p_dKMCount+=dVergZeit*p_dMaxSpeed;
    		p_dTimeCount=dGlobaleZeit;
    	}
    	else {cerr << p_sName << "wurde grade zum zweiten Mal aufgerufen";}
    
    }
    

  • Mod

    i/5 ist 0 für i < 5. Integerdivision.

    Das Programm ist grauenhaft². Aber es nutzt wohl nichts, konkrete Verbesserungen vorzuschlagen, wenn dir alles vorgegeben ist. Du Armer 😞 .



  • Danke, jetzt klappts.

    Auch wenn ich das meiste nicht ändern kann, wie würde man es denn besser machen?
    Pointer hätt ich nicht benutzt, die vInitialisierung macht wenig Sinn, die ganzen Namen gehen mir auf den Senkel, aber den Typ in den Variablennamen zu schreiben find ich nachvollziehbar. Die cout's in Konstruktoren und Destruktor sind zu Testzwecken (vorgegeben). Ob man die Zeit wirklich global machen muss, weiss ich nicht.

    Bei der vAbfertigung war vorgegeben, dass die Variablen aktualisiert werden falls die Funktion in diesem Zeitabschnitt nicht schonmal aufgerufen wurde. Die cerr hab ich noch dazu gesetzt, um das wenigstens mitzukriegen, denn eig. sollen die in einem Zeitabschnitt nicht mehrfach abgehandelt werden.

    Ansonsten fällt mir nichts auf, aber wissen würds ichs schon gerne - ich seh nicht ein, stundenlang etwas falsch zu lernen, nur um irgendein Praktikum zu bestehen.


  • Mod

    Tut mir leid, aber das ist einfach ungeheuer viel, was daran schlecht ist. Da sitze ich stundenlang dran, das alles zu erklären.

    Bezüglich Typen im Variablennamen trifft es dieser Beitrag meiner Meinung nach ganz gut:
    http://www.c-plusplus.net/forum/p1773551#1773551



  • Und das ist erst Aufgabe 1 von 9 ;).
    Es wird also noch viel lustiger 🙄
    Dann mal danke, ich mach jetzt erstmal weiter, mal schauen, wann wieder was nicht klappt.


Anmelden zum Antworten