Vererbung aber wie

Winner

Erfahrenes Mitglied
Hallo! Ich noch mal!

kann mir einer sagen wie ich in c++ vererben kann! Besser gesagt ich würde gerne in einer cpp Datei meine Funktionen schreiben, und in meiner Haupt cpp nur die Funktioen ausführen.

Ich weis es ist heist nicht vererben sondern es sollen nur die Variablen Klassen übergreifend bekannt sein!

Also für Tipps bin ich sehr dankbar!

Gruß
 
mmh, ich hoffe ich verstehe dich richtig..

also, mit Veerbung hat das ganze wie du richtig erkannt hast, nichts zu tun.

was du willst sind Eigenschaften (Variablen) die öffentlich sind

wenn due jetzt Klasse A hast:

Code:
class A
{
public:
  int var1;
  int var2;
private:
  int var3;
}
kannst du in klasse B darauf zugreifen:
Code:
class B
{
  A instanzVonA;
}

public void B::funktion()
{
  cout >> instanzVonA.var1;
}
auf als private deklarierte Eigenschaften kannst du nicht zugreifen.
natürlich muss du wenn du es in mehreren Dateien verteilt hast, in B den zu A gehörden Header einbinden.

oder meintest du was ganz anderes?
 
Nein das ist schon korrekt so! Ich meine ich will nur ein Konsolen Fenster erstellen. Mein Programm soll aber strukturiert sien und deshöabmöchte ich das ich meherer cpp datein habe! Wie geht das mit den Funktionen bestimmt ähnlich!

Wie besser gesagt wann genau muss ich den Header einbinden Muss das immer geschehen oder gibt es fälle wo dieses nicht nötig ist?


Gruß und schon mal besten dank
 
Um das ganze zu verstehen mache ich gerade mal ein kleines BSP was aber nicht so wirklich funtionierne will!

kannst du mir vielleicht helfen?
code meiner schreiben.cpp die ich nachher im main nutzen will
Code:
#include <iostream.h>
#include <stdio.h>

class schreiben{

private:
	char vname[20];
	char nname[20];
	int punkte;

public:
	void eingeben(); //public Elementfunktion
	void anzeigen();
	void mist(char h);

};


void schreiben::eingeben(){
	cout <<"Vorname: ";
	cin >> vname;
	cout << "Namchname:";
	cin >>nname;
	cout <<"Gesamtpunkte";
	cin>>punkte;
		
}


void schreiben::anzeigen(){
	cout<<"\n"<<vname<<" "<< nname <<"\n";
	cout<<"Punkte: " << punkte<<"\n";
	cout<<"es hat geklappt";

}

void schreiben::mist(char h){
	printf("%c",h);
}

so und jetzt die main, da kommt dann beim ausfürhen der exe folgenden meldung

-->erstmal code

Code:
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <iostream>  

#include "schreiben.cpp"

using namespace std;


void main(void){

schreiben schule1, schule2;

schule1.eingeben;
schule1.anzeigen;

schule2.eingeben;



//return 0;
}

Die Felhermeldung lautet: Linking...
schreiben.obj : error LNK2005: "public: void __thiscall schreiben::eingeben(void)" (?eingeben@schreiben@@QAEXXZ) already defined in main.obj
schreiben.obj : error LNK2005: "public: void __thiscall schreiben::anzeigen(void)" (?anzeigen@schreiben@@QAEXXZ) already defined in main.obj
schreiben.obj : error LNK2005: "public: void __thiscall schreiben::mist(char)" (?mist@schreiben@@QAEXD@Z) already defined in main.obj
Debug/main.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Es lassen sich beiden cpp Datei Fehlerlos kompilieren aber beim ausführen der exe kommt das oben gezeigte!

Ich weis nicht wo dran das liegt! Kann mir das einer sagen

Besten Dank


PS: Kann das sein ddas ich die neue Klasse in eine Headerfile schreiben muss, weil dann funktioniert das ganze
 
Zuletzt bearbeitet:
Achso, alles klar.

die Link Fehler kommen daher, dass man bei Funktionaufrufen, auch mit leerer Parameterliste, immer ( und ) anhängen muss. also in deinem Fall
Code:
schule1.eingeben()

außerdem hat es sich bei c++ eingebürgert, pro Klasse zwei Dateien zu verwenden. Eine Klassenname.hpp, die die Klassendefinition enthält und eine Klassenname.cpp, die die Dekleration der Funktionen erhält. Wenn du eine IDE verwendest, bieten die meisten auch einen eingebauten Dialog, um diese Struktur automatisch zu erstellen..

das ganze sähe dann so aus:

A.hpp
Code:
class A
{
/...
}

A.cpp
Code:
#include "A.hpp";

void A::funktion1()
{
}

main.cpp
Code:
#include "A.hpp";

void main()
{
  A intstanz;
  instanz.funktion1();
}
 
Um das ganze zu verstehen mache ich gerade mal ein kleines BSP was aber nicht so wirklich funtionierne will!

kannst du mir vielleicht helfen?
code meiner schreiben.cpp die ich nachher im main nutzen will
Code:
#include <iostream.h> // CPP, nicht C!
#include <stdio.h> // Wieso nun Standart Input/Output?

class schreiben{

private:
	char vname[20];
	char nname[20];
	int punkte;

public:
	void eingeben(); //public Elementfunktion
	void anzeigen();
	void mist(char h);

};


void schreiben::eingeben(){
	cout <<"Vorname: ";
	cin >> vname;
	cout << "Namchname:";
	cin >>nname;
	cout <<"Gesamtpunkte";
	cin>>punkte;
		
}


void schreiben::anzeigen(){
	cout<<"\n"<<vname<<" "<< nname <<"\n";
	cout<<"Punkte: " << punkte<<"\n";
	cout<<"es hat geklappt";

}

void schreiben::mist(char h){
	printf("%c",h);
}

so und jetzt die main, da kommt dann beim ausfürhen der exe folgenden meldung

-->erstmal code

Code:
#include <stdio.h> // Was denn nun, CPP oder C?
#include <string>
#include <stdlib.h> // cstdlib
#include <iostream>  

#include "schreiben.cpp" // Du kannst nur Headerdateien einbinden

using namespace std;


void main(void){ // NIEMALS main als void vom Rückgabetyp deklarieren

schreiben schule1, schule2;

schule1.eingeben; // Du behandelst deine Funktion wie eine Variable
schule1.anzeigen; // Du behandelst deine Funktion wie eine Variable

schule2.eingeben; // Du behandelst deine Funktion wie eine Variable



//return 0; // Siehe oben!
}

Die Felhermeldung lautet: Linking...
schreiben.obj : error LNK2005: "public: void __thiscall schreiben::eingeben(void)" (?eingeben@schreiben@@QAEXXZ) already defined in main.obj
schreiben.obj : error LNK2005: "public: void __thiscall schreiben::anzeigen(void)" (?anzeigen@schreiben@@QAEXXZ) already defined in main.obj
schreiben.obj : error LNK2005: "public: void __thiscall schreiben::mist(char)" (?mist@schreiben@@QAEXD@Z) already defined in main.obj
Debug/main.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Es lassen sich beiden cpp Datei Fehlerlos kompilieren aber beim ausführen der exe kommt das oben gezeigte!

Ich weis nicht wo dran das liegt! Kann mir das einer sagen

Besten Dank


PS: Kann das sein ddas ich die neue Klasse in eine Headerfile schreiben muss, weil dann funktioniert das ganze

Ich hab mal alles Unschöne und Fehlerhafte dick markiert und ein Kommentar daneben geschreiben.
 
Zurück