Unterfunktion
-
kann mir da mal bitte jemand da ein kleines Beispiel posten? Denn ich kann mir der Aussage nicht alt so viel anfangen, da mir da leider doch die Grundlagen fehlen.
-
#include <iostream> struct Foo { void bar() { std::cout<<"Bullshit"<<std::endl; } }; int main() { Foo *f = new Foo; f->bar(); delete f; return 0; }Noch simpler geht's nicht. Hier ein Tutorial: http://tutorial.schornboeck.net/inhalt.htm
-
abgesehen von der Abteilung mit dem -> geht das auch mit 2 Klassen, die ich "seperat" von einander definieren kann?
class Lebewesen{ privat: public: void ausgabe(void); }; class Mensch{ privat: public: void groesse(); };So das der Aufruf Lebewesen.Mensch.groesse(); lautet oder ähnlich halt
-
Eh, ja. Aber dein privat:public Konstrukt ist nicht korrekt. So geht's:
class Lebewesen { public: void ausgabe(); //Kein void in die Klammer, das braucht's nur in C }; class Mensch { public: Lebewesen lebewesen; //Hier ein Lebewesen als öffentliche member-variable void groesse(); }; Mensch m; m.lebewesen.ausgabe();Kannst natürlich auch ein Mensch in ein Lebewesen einbauen^^
Allerdings möchte ich dich darauf hinweisen, dass es sinnvoller wäre, Mensch von Lebewesen abzuleiten, da ein Mensch ein Lebewesen ist.
-
Hallo
sicher geht das, Lebewesen must dann einen Pointer auf eine Instanz von Mensch haben.
Allerdings its dein konkretes Beispiel schlecht, Mensch sollte besser von Lebewsen abgeleitet sein. Denn Mensch ist ein Lebewesen, aber kennst du ein Lebewesen, das einen menschen beinhaltet?
Wie schon erwähnt arbeite das Tutorial durch, bevor du wild drauflos rätst
bis bald
akari
-
ich hab da noch ein kleines Problem, das mit dem Aufruf geht wunder bar.
Jetzt will/ muss ich aber auf eine Variable aus der anderen klasse zugreifen, wie kann ich das machen?class Lebewesen { public: int i; Lebewesen(); void ausgabe(); //Kein void in die Klammer, das braucht's nur in C }; class Mensch { public: Lebewesen lebewesen; //Hier ein Lebewesen als öffentliche member-variable void groesse(); }; void Mensch::groesse(){ cout << i << endl; // i kommt aus der anderen Klasse } Lebewesen::Lebewesen(){ i = 100; } void main(){ Mensch m; m.lebewesen.ausgabe(); }
-
void Mensch::groesse(){ cout << lebewesen.i << endl; // i kommt aus der anderen Klasse }
-
Hallo
warum arbeitest du nicht erstmal das genannte Tutorial durch? Da werden auch solche Grundlagen erläutert.
bis bald
akari
-
ich hab gerade gesehen, das ich einen Fehler im Code habe, ich habe die Var i in der Falschen Klasse eingebracht, ich wollte genau entgegengesetzt auf die Var zugreifen
#include <iostream.h> class Lebewesen { public: Lebewesen(); void ausgabe(); //Kein void in die Klammer, das braucht's nur in C }; class Mensch { public: int i; Lebewesen lebewesen; //Hier ein Lebewesen als öffentliche member-variable void groesse(); }; void Lebewesen::ausgabe(){ cout << i << endl; // i kommt aus der anderen Klasse } Lebewesen::Lebewesen(){ i = 100; } void main(){ Mensch m; m.lebewesen.ausgabe(); }ich muß somit aus der Klasse Lebewesen auf die Klasse Mensch zugreifen also genau entgegengesetzt wie vorher.
-
Im Allgemeinen musst Du dem Objekt lebewesen bei der Konstruktion eine Referenz auf this (das Objekt vom Typ Mensch) mitgeben.
Im Speziellen solltest Du Grundlagen lernen, Dein Design überdenken, Dir Gedanken machen was Du damit erreichen willst und es dann nochmal probieren.
-
Mit den Grundlagen habt ihr ja alle Recht, das ich mit C++ noch nicht viel zu tun hatte weiß ich, das Hauptproblem was ich habe ist, das mein Ausbilder mir die Aufgabe gegeben hat das Problem was ich geschildert hab zu lösen, nächstes Problem ich hab wie gesagt in C++ keinen bis kaum einen Plan, ich bin ja schon froh das ich das mit den Klassen so einigermaßen auf die Reihe bekomme und mein Ausbilder kann mir auch nicht weiterhelfen, da der es auch nicht weiß. Aus diesem Grund hatte ich gehofft, hier schnell eine Lösung zu finden, denn ich muß leider morgen auch schon fertig sein. Ich hoffe ihr versteht jetzt warum ich hier so einen Streß mache, SORRY dafür.
mfG Net_Hans
-
Wenn der Ausbilder sagt das er es nicht weiß, wird das so nicht stimmen. Er wird also wohl eher sehen wollen was Du selbst hinbekommst - eventuell schadest Du mit einer fertigen Lösung aus dem Forum nur selbst, weil der Stoff an diesem Ergebnis ausgerichtet wird.
Ohne die Aufgabe zu kennen wäre es eventuell sinnvoller Mensch von Lebewesen zu erben.
Also "Mensch ist ein Lebewesen" und nicht "Mensch hat ein Lebewesen", was zwar bei einigen sicherlich stimmen mag, aber auch diese Menschen sind Lebewesen

-
Die Aufgabe an sich dreht sich um die Portansteuerung des LPT Ports, dafür hab ich fertig funktionen bekommen, ich soll jetzt eine Klasse schreiben, die erst mal alles initalisiert und dann noch bestimmte Aufgaben ausführen kann. Ein Modul von der Mainklasse zB. LPT ist das Lauflicht oder der Würfel. Es kommen also immer mehr Module hinzu. Aus diesem Grund auch die Geschichte mit dem umständlichen Aufruf, ich hätte mir auch die Arbeit schenken können und alles in eine Klasse, aber das ist doof, denn so gehr der Überblich verlohren und da ich nicht in jedem Modul die Treiber und Ports initalisieren soll, kommt alt die Aufgabe mit der übergabe der Vars von Klasse zu klasse.
class LPT{ public: int lpt_port; int lpt_bit; int init(); int dinit(); ... }; class LAUFLICHT{ public: void Linkslauf(int laufrichtung); //in der Funktion werden int lpt_port, int lpt_bit gebraucht ... }; class WUERFEL{ public: void wuerfeln(); //in der Funktion werden int lpt_port, int lpt_bit gebraucht }; void main(){ LPT test; int i; cin >> i; if(i==0){test.LAUFLICHT.Linkslauf(1);} if(i==1){test.WUERFEL.wuerfeln();} }ich hoffe das meine Situation jetzt richtig durchschaubar ist.