arg - virtuelle funktionen
-
moin
ich hab ein problem mit virtuellen funktionen, ich raffs nämlich garnet :o
kann mir da jemand vielleicht ein wneig helfen, da mein script dafür
ziemlich unbrauchbar ist :|#include <iostream.h> class zahl { private: int a; int b; public: zahl::funktion(); virtual void ausgabe(); }; class ya:public zahl { public: void ausgabe(); }; void ausgabe() { cout<<"Ausgabe durch virtuelle Funktion"<<endl; } zahl::funktion() { cout<<"Berechnung des maximums der Zahlen a und b."<<endl; cout<<"Bitte geben Sie den Wert fuer a ein: "<<endl; cin>>a; cout<<"Bitte geben Sie den Wert fuer b ein: "<<endl; cin>>b; if (a>b) { cout<<"Maximum ist :"<<a<<endl; } else if (a<b) { cout<<"Maximum ist :"<<b<<endl; } else {cout<<"OMG"<<endl;} } void main() { ya eins; eins.funktion(); eins.ausgabe(); }
:der quelltext is wahrscheinlich unbrauchabr weil ich schon viel zumprobiert habe:
mfg rum
-
ya::ausgabe hast du nicht definiert, dafür eine freie Funktion ausgabe.
Außerdem sollte irgendwo ein Zeiger oder eine Referenz auftauchen, sonst tut virtual nichts.
-
Hallo
void zahl::ausgabe() { } ... void ya::ausgabe() { } ...
bis bald
akari
-
void ya:ausgabe() { cout<<"Ausgabe ya"<<endl; } void zahl:ausgabe() { cout<<"Ausgabe basis"<<endl; }
mfg
// zu spät verdammt
-
#include <iostream> using namespace std; class zahl { private: int a; int b; public: void funktion(); virtual void ausgabe() = 0; }; class ya : public zahl { public: virtual void ausgabe(); }; void ya::ausgabe() { cout<<"Ausgabe durch virtuelle Funktion"<<endl; } void zahl::funktion() { cout<<"Berechnung des maximums der Zahlen a und b."<<endl; cout<<"Bitte geben Sie den Wert fuer a ein: "<<endl; cin>>a; cout<<"Bitte geben Sie den Wert fuer b ein: "<<endl; cin>>b; if (a>b) { cout<<"Maximum ist :"<<a<<endl; } else if (a<b) { cout<<"Maximum ist :"<<b<<endl; } else {cout<<"OMG"<<endl;} } int main (void) { ya eins; eins.funktion(); eins.ausgabe(); }
1. int main (void) und nicht void main (void)
2. include<iostream>
using namespace std;
3. Am besten noch einen Konstruktor schreiben
4. virtual am besten auch bei der abgeleiteten Klasse hinschreiben, dann ist es übersichtlicher
5. Wenn man bei der Basisklasse die virtuelle Funktion nich definiert = 0 dahinter schreiben (verhindert Instanziierung)
6. void funktion(); und nicht funktion() in C++ gibt es kein implizites zurückgeben von int (außerdem wird ja kein auch nichts zurückgegeben)Mfg
Felix
-
huhu
ok also ich nach langem wühlen doch ein beispiel gefunden welches
mir die sache relativ übersichtlich erklärt
das mit dem zeiger scheint unabdinglich zu sein^^
hier der code falls jemand intresse hat was ich gefunden habe^^#include <iostream> using namespace std; class basis { public: virtual void ausgabe() //definition der virtuellen funktion in der basisklasse { cout<<"basis ausgabe"<<endl; } }; class abgeleitet:public basis { public: virtual void ausgabe() //definition der virtuellen funktion in der abgeleiteten klasse { cout<<"abgeleitet ausgabe"<<endl; //rückgabewert und formalparameterliste sind gleich mit } //gleichnamiger funktion der basisklasse }; void main() //eigentliche main { cout<<"Virtuelle Funktion 'ausgabe' der basisklasse 'basis'."<<endl; cout<<"Virtuelle Funktion 'ausgabe' der abgeleiteten klasse 'abgeleitet'."<<endl; cout<<""<<endl; basis b1,b2,b3; //objekte der basisklasse abgeleitet a1,a2,a3; //objekte der vererbten klasse basis *zeig; //definition des basisklassenzeigers zeig zeig=&b1; //verweis des zeigers auf ein objekt der basisklasse zeig->ausgabe(); //aufruf der virtuellen funktion zeig=&b2; zeig->ausgabe(); zeig=&b3; zeig->ausgabe(); zeig=&a1; zeig->ausgabe(); zeig=&a2; zeig->ausgabe(); zeig=&a3; zeig->ausgabe(); cout<<""<<endl; cout<<"Ein neuer Zeiger mit Verweis auf die Basisklasse."<<endl; cout<<""<<endl; basis *ptr=new basis; //definition des basisklassenzeigers ptr mit verweis auf die basisklasse ptr->ausgabe(); //aufruf der virtuellen funktion ptr=&a3; ptr->ausgabe(); ptr=&b1; ptr->ausgabe(); cout<<""<<endl; }
mfg rum