Klassen zugriff von einer Funktion in der Main?



  • Hallo,

    habe eine kurze Frage die Ihr mir hoffentlich beantworten könnt.

    Folgendes soll Programmiert werden:
    -eine Klasse Auto mit : Hersteller,Alter und Neupreis
    - dazu methoden : read(einlesen), toString(darstellung als string) und gebrauchtpreis (neupreis/alter)

    Auto.h wie folgt:

    #include <iostream>
    #include <string>
    #include <conio.h>
    #include <sstream>
    
    using namespace std;
    
    class Auto{
    public:
         Auto();
    	 Auto(string,int,double);
    	 void read();
    	 string toString();
    	 double gebrauchtPreis();
    
    private:
        string hersteller;
    	int alter;
    	double neuPreis;
    };
    
     Auto::Auto()
     {
    	 hersteller = "vw";
    	 alter = 10;
    	 neuPreis = 1000;
     }
     Auto::Auto(string herst,int alter,double pr)
     {
    	 hersteller = herst;
    	 this->alter = alter;
    	 neuPreis = pr;
     }
     void Auto::read()
     {
    	 cout <<" Hersteller: "; 
    	 cin >> hersteller;
    	 cout <<" Alter: ";
    	 cin >> alter;
    	 cout << " Neupreis: ";
    	 cin >> neuPreis;
     }
     string Auto::toString()
     {
    	 stringstream s;
    
    	 s << hersteller <<" | " <<alter << " | " <<neuPreis<<endl;
    
    	 return s.str();
     }
     double Auto::gebrauchtPreis()
     {
    	 double gpreis = neuPreis / alter;
    
    	 return gpreis;
     }
    

    nun kommt die eigentliche Frage:

    es sollen zwei FUNKTIONEN erstellt werden, nehme an diese werden dann in der main.cpp deklariert und definiert:

    Auto teuerstesAuto( Auto a[],int n)
    {
    double max =0;
    for(int i=0; i<n;i++)
    {
    if(Auto a[i] > max)
    {
    max = Auto a[i];
    }
    }
    return max;
    }
    

    Weiterhin gibt es die Funktion kapital, dort soll die Summe aller Autos berechnet werde:

    double kapital(Auto a[], int n)
    {
    }
    

    Die Frage die ich habe ist:

    1. Was hat es mit dem

    Auto a[]
    

    auf sich in den Funktionen ? und schreibe ich Auto a[] in der Funktion oder nur a[]? Greifen die auf die Klasse Auto zu und übergeben das Feld a[]? Bzw. woher bekommt Auto a[] die Preise ?

    2. wie werden die beiden Klassen in der Main aufgerufen?
    mit

    teuerstesAuto(a[],n);
    

    ?

    Vielen Dank für eure Antworten. Bin gerade echt am verzweifeln da ich nichts im Netz dazu finde. 😕

    Gruß
    J.



  • Bevor wir auf die Frage eingehen, erstmal viel wichtiger: Ist das eine Schul-/Uniaufgabe, bei der Sachen wie "Auto teuerstesAuto( Auto a[],int n)" nicht verändert werden dürfen?





  • daddy_felix schrieb:

    Bevor wir auf die Frage eingehen, erstmal viel wichtiger: Ist das eine Schul-/Uniaufgabe, bei der Sachen wie "Auto teuerstesAuto( Auto a[],int n)" nicht verändert werden dürfen?

    Es handelt sich um eine UNI Aufgabe, somit soll es so belassen werden.

    Singender Holzkübel schrieb:

    Das nennt sich Array

    Weiter Links:
    http://www.tutorialspoint.com/cplusplus/cpp_arrays.htm
    http://www.cprogramming.com/tutorial/lesson8.html

    Das es sich um ein Array Feld handelt ist mir bewusst, es geht um den Typ "Auto" den ich nicht verstehe und nicht weiß welche Form der Rückgabtyp haben soll.

    Bin nun etwas weitergekommen und habe die Kapitalfunktion hinbekommen.

    [code]
    Auto teuerstesAuto(Auto a[],int n)
    {
    double max=0;
    
    for(int i= 0; i<n;i++)
        {
    	if(a[i].gebrauchtPreis() > max)
    	{
    		max =a[i].gebrauchtPreis();
    	}
    	}
    
    return a[n]; //welchen Rückgabetyp hat das Teil? 
     }
    double kapital(Auto a[],int n)
    {
    	double sum=0;
    
    	for(int i=0; i<n;i++)
    	{
    		if( a[i].gebrauchtPreis()>sum)
    		{
    			sum= a[i].gebrauchtPreis();
    		}
    	}
    
    	return sum;
    }
    
    int main(){
         Auto st1;
    	 st1.read();
    
    	 Auto st2;
    
    	 cout << " Auto 1: "<<st1.toString();
    	 cout << " Auto 2: "<<st2.toString();
    
    	 int n;
    	 cout << "Anzahl Autos: ";
    	 cin >> n;
    
    	 Auto *werkstatt= new Auto[n];
    	 Auto a[10];
    
    	cout << teuerstesAuto(a,n).toString()<<endl;
    
    	cout <<kapital(a,n)<<endl;
    
    	getchar();
    
    	 delete[] werkstatt; 
    
    	 getchar();
    	 return 0;
    }
    


  • Ich dachte, in kapital solle etwas berechnet werden? Ich sehe da gar keinen Rechenoperator. Testest Du Deine Ergüsse eigentlich auch?



  • JayD2014 schrieb:

    Das es sich um ein Array Feld handelt ist mir bewusst, es geht um den Typ "Auto" den ich nicht verstehe und nicht weiß welche Form der Rückgabtyp haben soll.

    Auto a[]

    return a[n]; //welchen Rückgabetyp hat das Teil?

    Typ Auto



  • Belli schrieb:

    Ich dachte, in kapital solle etwas berechnet werden? Ich sehe da gar keinen Rechenoperator. Testest Du Deine Ergüsse eigentlich auch?

    Upps danke, habs selbst verpeilt 😃

    double kapital(Auto a[],int n)
    {
    	double sum=0;
    
    	for(int i=0; i<n;i++)
    	{
    	sum += a[i].gebrauchtPreis();
    	}
    
    return sum;
    }
    

    Singender Holzkübel schrieb:

    JayD2014 schrieb:

    Das es sich um ein Array Feld handelt ist mir bewusst, es geht um den Typ "Auto" den ich nicht verstehe und nicht weiß welche Form der Rückgabtyp haben soll.

    Auto a[]

    return a[n]; //welchen Rückgabetyp hat das Teil?

    Typ Auto

    Wenn ich jetzt aber das Maximum wiedergeben will, also mit meiner Variablen max, wie funktioniert das dann das die vom typ Auto ist ?

    Danke für die Geduld, bin aber echt blutiger Anfänger und stehe ab und an auf dem Schlauch 😕



  • Auto teuerstesAuto(Auto a[],int n)
    {
      double max=0;
      int nr = 0;
    
      for(int i= 0; i<n;i++)
      {
        if(a[i].gebrauchtPreis() > max)
        {
            max =a[i].gebrauchtPreis();
            nr = i;
        }
      }
    
      return a[nr];
    }
    

    oder etwas subtiler

    Auto teuerstesAuto(Auto a[],int n)
    {
      int nr = 0;
    
      for(int i= 1; i<n;i++)
        if(a[i].gebrauchtPreis() > a[nr].gebrauchtPreis())
            nr = i;
    
      return a[nr];
    }
    


  • Jayd2014 schrieb:

    Wenn ich jetzt aber das Maximum wiedergeben will, also mit meiner Variablen max, wie funktioniert das dann das die vom typ Auto ist ?

    Das funktioniert so nicht, macht auch keinerlei Sinn.
    Mit der Variable max speicherst du nur den höchsten Gebrauchtpreis des Autos (double), der gerade im Array gefunden wurde.

    Eine fertige Funktion könnte so aussehen:

    Auto teuerstesAuto(Auto a[], int n) 
    { 
        double max = 0;
        Auto teuerstes = a[0];
        /*
           Das teuerste Auto setzen wir zu Anfang mal auf das
           erste Auto im Array, weil wir davon aus gehen, dass
           es das teuerste ist.
         */
    
        for(int i = 0; i < n; i++) 
        { 
            if(a[i].gebrauchtPreis() > max) 
            { 
                // Es wurde ein neues, teueres Auto gefunden.
                max = a[i].gebrauchtPreis();
                teuerstes = a[i];
            } 
        } 
    
        return teuerstes;
     }
    

    Macht vielleicht mehr Sinn wenn du die Variable max in hoechsterPreis (oder so ähnlich) unbenennst.


Log in to reply