auf Methode in anderer Klasse zugreifen

Gast #4603101
Lesenswert?
• ▲
▼
Hallo,
ich arbeite mich gerade in Klassenprogrammierung in C++ ein.
Dabei bin ich jetzt bei einem Problem angekommen, bei dem ich heute 
nicht weiter gekommen bin
1
class Punkt {
2
public:
3
  Punkt(double X = 0, double Y = 0) { x = X; y = Y; }
4
  void set(double X, double Y) { x = X; y = Y; }
5
  double getX() { return x; }
6
  double getY() { return y; }
7
private:
8
  double x;
9
  double y;
10
};
11

12

13
void main() {
14
  // Zwei Variablen vom Typ "Punkt" zur Eingabe der Rechteckkoordinanten
15
  Punkt A, B;
16
  // Eingabe der Koordinaten der Punkte A und B
17
  double x, y;
18
  std::cout << "Koordinaten x und y Punkt A : "; std::cin >> x >> y; A.set(x, y);
19
  std::cout << "Koordinaten x und y Punkt B : "; std::cin >> x >> y; B.set(x, y);
20

21

22
  // Erzeugen eines Objekts der Klasse "Rechteck" und
23
  // Berechnung des Umfangs und der Flaeche des Rechteckes
24
  Rechteck RE(A, B);
25
  std::cout << "Die Rechteckflaeche betraegt " << RE.Flaeche() << std::endl;
26
  double Umfang;
27
  RE.Umfang(Umfang);
28
  std::cout << "Der Umfang des Rechteckes betraegt " << Umfang << std::endl;
29
}

Aufgabe ist es nun die Klasse Rechteck zu Programmieren. Hierbei kommen 
aber nun die Probleme
1
class Rechteck{
2
public:
3
  Rechteck(double A, double B);
4
  double Flaeche() { return 50; }
5
  double Umfang(double umfang) { return 50; }
6
private:
7
  double flaeche;
8
  double umfang;
9
};

zunächst habe ich in der Funktion Flaeche() und Umfang() feste werte 
reingeschrieben. Das Problem liegt schon beim Aufruf
1
Rechteck RE(A, B);
Da A und B variablen vom Typ Punkt sind, kann ich die in der Klasse 
Rechteck nicht benutzen.
Wenn ich den Aufruf umänder in
1
Rechteck RE(10, 20);
funktioniert der Aufruf.
Dann habe ich versucht in der Klasse Rechteck die Funktion Flaeche zu 
ändern in
1
Rechteck(double A, double B) {flaeche = ((B.getX() - A.getX()) * (B.getY() - A.getY()));}
2
double Flaeche() {return flaeche;}
Aber auch hier gibt es einen Fehler:
expression must have class type.

kann mir hier jemand einen tip geben?

Johannes
#4603116
Lesenswert?
• ▲
▼
Johannes schrieb:
> Da A und B variablen vom Typ Punkt sind, kann ich die in der Klasse
> Rechteck nicht benutzen.

Warum solltest du die nicht benutzen können?

> kann mir hier jemand einen tip geben?

In deinem Rechteck musst du die beiden Punkte speichern. Dann kannst du 
in den Funktionen Flaeche() und Umfang() daraus die gewünschten Werte 
berechnen. Du brauchst einen Konstruktor, über den du die Punkte beim 
Erzeugen des Rechtecks übergeben kannst.
Gast #4606091
Lesenswert?
• ▲
▼
Dir wurden beide üblichen Weg schon genannt
1
class Rechteck{
2
public:
3
  Rechteck(Punkt A, Punkt B);

bzw.
1
Rechteck(A.getX(), B.getX());

üblich in C++ wäre wohl das erste vorallen wenn du dabei bist den Code 
gerade erst zu schreiben

du kannst auch sowas machen:
1
class Rechteck{
2
public:
3
  Rechteck(Punkt A, Punkt B);
4
  Rechteck(double A, double B);

Das nennt sich Methoden Überladen, an entscheidet der Compiler anhand 
der Parameter beim Aufruf welche der beiden Rechteckmethoden benutzt 
werden.

bzw warum double für die X/Y Koordinaten von Punkt. FloatingPoint 
Datentypen (so wie Double) haben immer denn Nachteil das sie dazu neigen 
ungenau zu werden. vielleicht besser int nehmen und Notfalls deinen User 
sagen das dein Koordinatensystem so wahlen das es immer ganze 
(vielleicht sehr große)  Zahlen sind. Also zum Beispiel in Milimeter 
Rechnen statt Meter und sich so die Komma Sparen. siehe hierzu 
https://de.wikibooks.org/wiki/C-Programmierung:_Sicherheit#Das_Problem_der_Reellen_Zahlen_.28Floating_Points.29 
(auch wenn es da zum C geht das Problem beleibt gleich)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren