OOP Grundsätzliche Frage - Include von Dateien

immnn

Mitglied
Nabend,

ich habe eine main.cpp in der sich die Main Funktion befindet. Zudem habe ich eine Klasse (Nennen wir sie MyClass) mit zugehörigen Methoden.
Nun aber habe ich Probleme die Klasse, die Methoden und die Main Funktion in unterschiedliche Dateien unter zu bringen.

Bisher habe ich immer die Klassendeklaration in eine MyClass.h und die -methoden in eine MyClass.cpp gespeichert. Da aber hatte ich immer irgendwelche Probleme beim includieren. (Welche Datei includiere ich in welcher, um in der Main Funktion meine Klassen gescheit nutzen zu können?). Besonders Probleme bereitet es mir auch wenn ich eine API in der Main Funktion, sowie einer Klasse benötige. (Hier auch, wo und wie includiere ich was?)
 
Hallo
ich mache es grundsätzlich so wie es in dem meisten Büchern stehen dürfte.
In der Header Datei (myClass.h) kommen die Deklarationen, in der Datei (myClass.cpp) wird die Header-Datei includiert und es stehen die Definitionen z.B. Memberfunktionen.
In deiner main.cpp includierst du nur die Header-Datei (myClass.h). Die meisten großen Programmierumgebungen linken es so das es dann läuft, bei manchen muss man es mit Befehlen linken.

Aufbau Header Datei:
Code:
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass
{
  // deklarations
};
#endif

mfg :)
 
Aha, danke dir!

Ich hab aber noch ein Problem.
Und zwar hab ich zwei Klassen. Ich muss in Klasse A einen Public Member der Klasse B verwenden. Nur leider weiß ich nicht wie ich der Klaase A diesen übergeben kann.
Würde da was über Pointer gehen? Z.B. dem Konstruktor der Klasse A eine Referenz auf den Public Member der Klasse B übergeben!?
Wenn das möglich wäre, würde ich einen Beispielcode willkommen heißen :)


By the way, was genau macht dieses
Code:
#ifndef MYCLASS_H
#define MYCLASS_H

#endif
?
 
Zuletzt bearbeitet:
Zu deiner ersten Frage kann ich dir nicht wirklich weiterhelfen, da ich selber noch in den Kinderschuhen stecke was die OOP angeht.

Zum 2.ten
Code:
#ifndef __STDIO_H
   #define __STDIO_H
#endif
Hier überprüft der Präprozessor, ob er die Headerdatei <stdio.h> noch nicht eingebunden hat.

Das ist zum Beispiel erforderlich, wenn mehrere Headerdateien und Module benutzt werden, die <stdio.h> benötigen. Somit würden alle Makros in der Headerdatei <stdio.h> mehrmals definiert werden, was im schlimmsten Fall sogar einen Fehler auslösen kann. Mit der eben geschriebenen Struktur wird dieses vermieden.

siehe Präprozessor-Direktiven

mfg
 
Hi.
Ich hab aber noch ein Problem.
Und zwar hab ich zwei Klassen. Ich muss in Klasse A einen Public Member der Klasse B verwenden. Nur leider weiß ich nicht wie ich der Klaase A diesen übergeben kann.
Würde da was über Pointer gehen? Z.B. dem Konstruktor der Klasse A eine Referenz auf den Public Member der Klasse B übergeben!?
Du kannst eine Methode einer anderen Klasse nur für ein bestimmtes Objekt dieser Klasse aufrufen. D.h. du benötigst eine Instanz der Klasse B um eine Methode dieser Klasse aufrufen zu können. Eine solche Instanz kannst du z.B. im Konstruktor übergeben und entweder eine Referenz, einen Zeiger oder eine Kopie dieser Instanz speichern:
C++:
class B {
public:
  void x();
};

class A {
  B& my_B;

public:
  A(B& b) : my_B(b) {
  }

  void func() {
    my_B.x();
  }
};

B b;
A a(b);

Gruß
 

Neue Beiträge

Zurück