enums in Konstruktoren verwenden
-
314159265358979 schrieb:
Das habe ich doch gesagt, wenn auch weniger ausführlich, abgesehen davon, dass ich Referenzen nicht erwähnt habe.
Nein, du hast folgendes gesagt:
struct base { void foo() { }; }; struct derived { }; int main() { derived d; base* p = &d; }Dafür bräuchte man
virtual. Wie du siehst, ist das aber hinten und vorne nicht der Fall. Womöglich hast du das gemeint, was ich geschrieben habe, aber das hast du nicht hingeschrieben. Was du hingeschrieben hast stimmt einfach nicht.Grüssli
-
Ich sagte für das erwünschte Verhalten braucht man virtual, und das ist richtig.
-
314159265358979 schrieb:
Ich sagte für das erwünschte Verhalten braucht man virtual, und das ist richtig.
Ich will ja nicht pingelig sein, aber das ging aus deinem Beitrag hinten und vorne nicht raus. Geschrieben hast du völlig was anderes. Vergiss all dein Wissen über
virtualund Polymorphie in C++ und liess dann nochmals deinen Beitrag. Würdest du als Anfänger daraus wirklich schlau werden? Ich habe so meine Zweifel
Grüssli
-
Du hast Recht, wenn du sagst, dass meine Erklärung scheiße ist. Richtig ist sie trotzdem.
-
Dann erklär mir mal, wieso der folgende Satz richtig sein soll:
314159265358979 schrieb:
virtual brauchst du, wenn du Zeiger auf Objekte einer abgeleiteten Klasse in Zeigern auf Objekte der Basisklasse speichern willst.
Ich füge in diesem Satz ein Wort ein und dann wäre er richtig:
virtual brauchst du nicht, wenn du Zeiger auf Objekte einer abgeleiteten Klasse in Zeigern auf Objekt der Basisklasse speichern willst.Es ist nicht nur scheisse erklärt, sondern der Satz stimmt so auch gar nicht.
Grüssli
-
Dass da implizit steht "wenn du dieses Verhalten haben willst", habe ich vorrausgesetzt.
Mir aber auch latte, erklärs ihm einfach so, wie du es für richtig hältst.
-
Also ohne die Erklärung mit den Beispielen hätte ich ehrlich gesagt deinen Satz nicht ganz verstanden

Wie dem auch sei, danke für die Erklärung zur Benutzung des virtuals, auch wenn das nicht das Hauptthema war. Beides ist jetzt aber auch erklärt und hoffentlich verstanden

-
Manchmal glaube ich es gibt hier zwei User mit dem (annähernd) gleichen Namen
314159265358979 oder so...
Einer schreibt teilweise echt kompetente Beiträge und einer behauptet Mist
und versucht ihn dann krampfhaft als richtig zu verkaufen.
-
Ich habe noch einmal eine Frage bzw. ein Problem mit enums.
Ich habe in einer Klasse ueber dem Konstruktor ein enum definiert, welches "Position" heißt. Die Klasse besitzt ein Attribut mit dem Typ dieses enums.Wenn ich aber in einer Methode der Klasse auf dieses Attribut zugreifen will bzw. es setzen möchte, kommt ein Fehler.
Hier mal die Klasse: (nur das Nötige)
class Spielbrett { public: enum Position { normal=0, links=90, kopf=180, rechts=270 }; Spielbrett() { // Initialisiere das Spielbrett init(); } ~Spielbrett() { } // destructor void init(); private: Position pos; };Und hier ist die .cpp-Datei mit einer Methode:
#include "Spielbrett.h" #include <iostream> using namespace std; void Spielbrett::init() { /* Zeile 26 */ pos=Position::normal; }Fehler ist:
Spielbrett.cpp: In member function 'void Spielbrett::init()': Spielbrett.cpp:26: error: 'Position' is not a class or namespaceDabei ist doch Position ein enum der Klasse. Was ist falsch?
-
pos = normal;
-
Ach, ich bin mal wieder auf den Kopf gefallen! D.h., wenn ich auf ein enum zugreifen will, muss ich davor nicht den enum-typen schreiben. Da hat mich wohl etwas anderes durcheinander gebracht.
Danke sehr!
-
In C++0x gibt es
enum classbzw.enum struct, mit denen du das musst.Vorher verwendet man oft so ein Idiom, um qualifiziert auf die Enums zugreifen zu können:
namespace Position { enum Type { // Enumeratoren hier }; }