eure Meinung zu OOP_Prog



  • tiy_05 schrieb:

    ja ! ich habe es getestet und funzt fehlerfrei.

    anmerkungen, nutze keine 'using namespace' in einer header-datei, definiere deine klassenfunktion vor der main-anweisung.



  • enno schrieb:

    anmerkungen, nutze keine 'using namespace' in einer header-datei, definiere deine klassenfunktion vor der main-anweisung.
    

    ich habe 'using namespace std' in der Header_datei wegen der Attribute

    vector <int> m_v1;
    vector<vector <int> > m_ mat1;
    

    Zum Ausprobieren habe ich 'using namespace std' rausgenommen dann kammen beim Kompileren 102 Fehler



  • tiy_05 schrieb:

    Zum Ausprobieren habe ich 'using namespace std' rausgenommen dann kammen beim Kompileren 102 Fehler

    Du musst dann natürlich überall std::vector schreiben 🙄



  • ok ich habe es aus der Header datei rausgenommen und 'std' überall hinzugefügt.
    das funzt ok .
    habt ihr dafür eine Begründung(damit ich es auch weiss) warum soll 'using namespace std' nicht in einer Header_datei sein?
    Danke



  • tiy_05 schrieb:

    habt ihr dafür eine Begründung(damit ich es auch weiss) warum soll 'using namespace std' nicht in einer Header_datei sein?

    Schau dir am besten im Tutorial oder Buch deiner Wahl nochmal das Kapitel über Namensräume an. Sämtliche STL Funktionalität liegt im std Namensraum. IIRC sind lediglich die C Referenzen (<c...> Header) auch im globalen Namensraum verfügbar.

    Zu deinem Code, da sind ja jede Menge Fehler drin.

    Class  CA
    

    C++ ist case-sensitive, es heisst also 'class'. Und gewöhne dir bitte gleich das C-Präfix vor Klassennamen ab. Das ist eine schlechte MFC Gewohnheit.

    vector<vector <int> > m_ mat1;
    

    Leerzeichen beim Abtippen vertauscht? Schon mal was von Copy&Paste gehört?
    Ähnlich an anderer Stelle.

    template<class...>
    {
       ....
       ....
    }
    

    Was soll das sein? 😕

    int obj::func1()
    

    Das muss

    int CA::func1()
    

    heissen. Genauso bei den anderen Funktionen.



  • weil der namspace dann für jeden header, der deinen header einbindet ebenfalls aufgelöst ist. un der trick bei namespaces ist ja gerade mit den namen verschiedener libarys nicht aneinander zu geraten.

    namespace a
    {
      void do_sth() {/* ... */}
    }
    
    namespace b
    {
      void do_sth() {/* ... */}
    }
    
    int main()
    {
      a::do_sth();
      b::do_sth();
      return 0;
    }
    


  • Danke schön für alle.ich habe es verstanden jetzt was die Namensräume betrifft.

    groovemaster schrieb:

    Zu deinem Code, da sind ja jede Menge Fehler drin.
    

    Entschuldigung,ich habe mich einfach vertippt.

    nochmal die Frage:
    was sagt ihr zu:
    1/den Aufrufen der Funktionen
    2/der Stelle,wo template steht .
    habt ihr noch Kritik oder was auch immer Anregungen oder Verbesserungen
    Danke sehr



  • Hallo
    nochmal die Fragen:
    was sagt ihr zu:
    1/den Aufrufen der Funktionen
    2/der Stelle,wo template steht .
    habt ihr noch Kritik oder was auch immer Anregungen oder Verbesserungen
    Danke sehr



  • tiy_05 schrieb:

    1/den Aufrufen der Funktionen

    Leider sieht man ja nicht, was die Funktionen tun. Es scheint mir aber so, als hättest du nur eine lange Funktion auf mehrere kleine aufgeteilt, ohne Sinn und Verstand. Die Klasse hat offenbar auch keinen Sinn, sie ist nur ein Funktionscontainer. Du machst aus einem prozeduralen Programm kein objektorientiertes, indem du die Funktionen in eine Klasse packst. Allein, dass deine Instanzmethoden auf die globalen Variablen zugreifen, ist ein Zeichen, dass du OOP nicht wirklich verstanden hast.

    2/der Stelle,wo template steht .

    Leider ist der Zweck des Templates nicht zu erkennen, auch nicht, warum es überhaupt ein Template ist. Templates sind kein Selbstzweck. Wenn man nicht sieht, wie du das Template einsetzt, kann man auch nicht sagen, ob du das richtig machst.



  • hallo
    ich darf leider nicht den ursprünglichen Code veröffentlichen. ich habe nun das Prog so umgeschrieben damit ja ihr wisst was ungefähr das prog tut. ich bitte um ihr Verständnis. Verbesserungen oder kritik sind willkommen, wie gesagt ich bin OOP_Anfänger.

    // Dat.h
    #ifndef Dat_h
    #define Dat_h Dat_h
    #include<vector>
    using namespace std;
    
    class  DATA
    { 
       private:
         std::vector <int> m_v1;
         std::vector <int> m_v2;
         std::vector<std::vector <int> > m_mat1;
       public:
         int readfile();  
         int edit_mat1();   
         int nrand( int a, int e);
         int edit_v(); 
         int print_v();
         int select();
         int writefile();   
    };
    #endif
    

    // Implemtierungsdatei: Dat.cpp

    #include ”Dat.h”
    #include <iostream>
    -----
    using namespace std;
    
    //globale Variablen :
          vector<vector <int> > g_mat1;
          vector<vector <int> > g_mat2;
          int  g_var1,g_ var2;
    
    int savedata(vector<int> v1, vector<double> v2;)
    
    //Converting from One Arbitrary Type to Another
    template <class out_type, class in_value>
    out_type cast_stream(const in_value & t)
    {
    	 stringstream ss;
    	 ss << t;                
    	 out_type result;       
    	 ss >> result;          
    	 return result;
    }
    
    int main()
    { 
       srand( time(0));
       DATA  obj;
       Obj. readfile();  
       return 0;
    }
    
    int DATA::readfile()  
    {
           Datei öffnen
             ............ 
    	..........	
            do   
    	{ 
                 // Daten in Vector m_v1, m_v2 und in Matrix  m_mat1      zwischenspeichern
                   .........
                   .........
                   int n= cast_stream(< int > (mystr);
                    ........
    
                   edit_mat1();  
                    .........
                    .........
                   edit_v(); 
                   ..........
                   ........ 
                   select();
                    // hier werden die bearbeiteten klassenvektoren m_v1, m_v2 in globale Matrizen  gespeichert 
                   savedata(m_v1, m_v2); 
    
             }while(!dat.eof());
             dat.close();
      return 0;
    }
    
    int DATA::edit_mat1() 
    { 
       // vektor m_v1 und Matrix m_mat1 bearbeiten 
        .........
        .........
       print_mat1();  
       writefile();   
       return 0;
    
    }
    int DATA::edit_v()
    {  
       // m_v1 und m_v2 bearbeiten und dann wieder in  m_v1 und m_v2 speichern
       .........
        .........
        print_v();
       return 0;
    
    }
    int DATA::print_v()
    {
           // Ausgabe von m_v1 und m_v2
       .........
       .........
    
       return 0;
    }
    
    int DATA::select()
    {
       .........
        .........
    
      z=nrand( x,y);
      return 0;
    }
     int DATA::nrand( int a, int e)
    {
      .....
      ......
      return r;
    }
    int DATA::writefile()   
    {    
       // hier werden die member_Matrix m_mat1 in eine einer Ausgabe_Datei   geschrieben
        .........
        ......... 
     return 0;
    }
    int savedata(vector<int> v1, vector<double> v2;)
    {
        g_mat1.push_back(v1);
        g_mat2.push_back(v1);
       ...... 
       // ausgabe...
         ....
       retun 0;
    }
    

    vielen Dank für jeden tip


Anmelden zum Antworten