Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Merlin

Frischling

  • »Merlin« ist der Autor dieses Themas

Beiträge: 16

Beruf: Schüler

  • Private Nachricht senden

1

10.12.2012, 13:15

Variable in zweiter Klasse ändert sich nach erben nicht

Hallo, ich bin es mal wieder mit einem neuen Problem.
Nach dem ich die Variable "m_Shooter" der Klasse CGame erbte habe ich versucht sie zu ändern,
doch in der Klasse CPlayer ändert sie sich nicht.
Was kann ich machen das sich die Variable in beiden Klassen ändert?

PS. Referenzen habe ich bereits versucht.
Aber ich weiß nicht ob ich dabei alles richtig gemacht habe. ^^

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

10.12.2012, 13:19

CGame soll immer noch nicht von CPlayer erben...
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

10.12.2012, 13:24

Wenn Klasse B von Klasse A erbt heißt das, dass B ein A ist.
Beispiel: class Auto : public Fahrzeug heißt so viel wie "Auto ist ein Fahrzeug"
Du hast class CGame : public CPlayer geschrieben. Das heißt "Game ist ein Player", was natürlich blödsinn ist.
Richtig wäre "Game besitzt einen Player". Um einen Besitz in C++ darzustellen deklarierst du eine Membervariable in der Klasse.
Z.B. so:

C-/C++-Quelltext

1
2
3
4
5
6
class CGame
{
//...
CPlayer player;
//...
}

Game soll dabei nicht direkt auf Variablen von CPlayer zugreifen können.

Eine ausführliche Erklärung findest du in diesem OpenBook: http://openbook.galileocomputing.de/oop/

Ausserdem solltest du noch ein paar kleine Übungen in der Konsole schreiben, vielleicht auf die SFML umsteigen, nicht versuchen ein halb fertiges Spiel zu erweitern(sondern ein neues zu schreiben) und ein ausführliches Buch zu C++ lesen(z.B. Der C++ Programmierer).
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (10.12.2012, 13:30)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

10.12.2012, 13:36

Da sind allgemein Probleme bei den Grundlagen zu erkennen. Wenn du ein Buch über C++ gelesen hast, hast du vermutlich nicht genug Übungen nebenher gemacht. Versuch dich erst mal an einfacheren Sachen. Wie schon mehrfach geschrieben wurde, ist die Vererbung bei dir der völlig falsche Ansatz. Trotzdem möchte ich noch kurz auf dein "Problem" eingehen.
Wenn du in CGame die Variable änderst, dann wird der Wert nur in der Instanz geändert. Der Wert wird aber nicht in jeder Instanz von CGame geändert. Genauso wenig wird der Wert nicht für jede Instanz von CPlayer geändert. Die Vererbung ist nicht dafür da, auf die Werte zuzugreifen. Dafür musst du entweder die Variable public machen, oder dir eine Methode schreiben die die Variable ändert. Normalerweise versucht man solche Logik aber in der Klasse selbst zu kapseln, sodass man von außen nicht wissen muss, dass es diese Variable überhaupt gibt.
Ernst gemeinter Tipp, nimm dir noch mal ein Buch vor und guck dir noch mal die Grundlagen an. Zu allem was du lernst machst du ein kleines Programm um es zu lernen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

10.12.2012, 16:15

Es ist eigentlich Schwachsinn Grundlagen hier zu erklären, das wurde schon oft genug getan und eigentlich sollte wir das voraussetzen. Selbst nach dem schlechtesten C++ Buch sollte das klar sein.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

10.12.2012, 18:00

Das kann man so sehen, muss man aber nicht. Es gibt nun mal auch Leute die sich trotz Buch mit sowas schwer tun. So ein Forum ist da um zu helfen. Da versteht jeder etwas anderes drunter. Hilfe zur Selbsthilfe ist super und vorsagen muss man auch nicht immer, kann aber jeder so für sich halten wie er möchte;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

10.12.2012, 19:59

Naja man kann ja fragen wenn man etwas nicht verstanden hat, aber er bastelt ohne Grundkenntnisse zu haben.

Werbeanzeige