Kleines Problemmit Klassen (private Variablen weiterverwenden)
-
Da ist die Aufgabenstellung, hab eien Fehler gemacht!!
Teil1:
http://realzockerclan.servercamp.de/Vektoren_schule/File0008.JPGTeil2:
http://realzockerclan.servercamp.de/Vektoren_schule/File0009.JPG
-
[bitte diese antwort löschen, hat sich geklärt]
-
In der Angabe steht was wichtiges: Es soll x,y,z eingegeben werden können.
Das heißt du musst nur deine ausgeben-funktion in der klasse vektor_3 verändern, dann sollte es funktionieren
[cpp]// vektor_2.h: Schnittstelle für die Klasse vektor_2.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_VEKTOR_2_H__A433B07A_CC1D_44A0_AEDF_71923B6AFD7C__INCLUDED_)
#define AFX_VEKTOR_2_H__A433B07A_CC1D_44A0_AEDF_71923B6AFD7C__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class vektor_2
{
public:
void lesen();
float uebergeben_x;
float uebergeben_y;
float betrag();
void ausgabe();
void eingabe();
vektor_2();
vektor_2(float, float);
virtual ~vektor_2();private:
float y;
float x;
};#endif // !defined(AFX_VEKTOR_2_H__A433B07A_CC1D_44A0_AEDF_71923B6AFD7C__INCLUDED_)
// vektor_2.cpp: Implementierung der Klasse vektor_2.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "vektor_2.h"
#include <math.h>
#include <iostream>
using namespace std;//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////vektor_2::vektor_2()
{
x = 0;
y = 0;
uebergeben_x = 0;
uebergeben_y = 0;
cout<<"Hier ist der Konstruktor, welcher die Variablen mit Null initialisiert!"<<endl;
}vektor_2::vektor_2(float a, float b)
{
x = a;
y = b;
cout<<"Hier ist der Konstruktor, welcher die Variablen mit bestimmten Parametern initialisiert!"<<endl;
}vektor_2::~vektor_2()
{
x = 0;
y = 0;
cout<<"Hier ist der Destruktor, welcher die Variablen deinitialisiert!"<<endl;
}void vektor_2::eingabe()
{
cout<<"Bitte geben sie einen X-Wert in [LE] ein: ";
cin>>x;cout<<"Bitte geben sie einen Y-Wert in [LE] ein: ";
cin>>y;
}void vektor_2::ausgabe()
{
cout<<"Der eingegebene X-Wert lautet: "<<x<<" [LE]"<<endl;cout<<"Der eingegebene Y-Wert lautet: "<<y<<" [LE]"<<endl;
}float vektor_2::betrag()
{
return( sqrt( pow(x,2) + pow(y,2) ) );
}void vektor_2::lesen()
{
uebergeben_x = x;
uebergeben_y = y;
}// vektor_3.cpp: Implementierung der Klasse vektor_3.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "vektor_3.h"
#include <math.h>
#include <iostream>
using namespace std;//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////
//TIPP:etwas geschickterer Konstruktor:
//vektor_3::vektor_3(float x1=0,float y1=0,float z1=0):vektor_2(x1,y1),z(z1)
//{}
//x,y,z werden mit 0 belegt wenn nichts angegeben wird, und der Konsturktor
//der anderen Klasse wird mittels Initialisierungsliste aufgerufen
vektor_3::vektor_3()
{
z = 0;
}vektor_3::vektor_3(float c)
{
z = c;
}vektor_3::~vektor_3()
{
z = 0;
}float vektor_3::betrag_3d()
{
lesen();return( sqrt( pow(uebergeben_x,2) + pow(uebergeben_y,2) + pow(z,2) ) );
}void vektor_3::eingabe_3d()
{
//NEU: Eingabefunktion von vektor_2 aufrufen.
this->eingabe();
cout<<"Bitte geben sie einen Z-Wert in [LE] ein: ";
cin>>z;
}void vektor_3::ausgabe_3d()
{
cout<<"Der eingegebene Z-Wert lautet: "<<z<<" [LE]"<<endl;
}// vektor_3.h: Schnittstelle für die Klasse vektor_3.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_VEKTOR_3_H__5864BBC1_DA7C_4904_9781_19480B4994DA__INCLUDED_)
#define AFX_VEKTOR_3_H__5864BBC1_DA7C_4904_9781_19480B4994DA__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "vektor_2.h"
class vektor_3: public vektor_2
{
public:
void ausgabe_3d();
void eingabe_3d();
float betrag_3d();
vektor_3();
vektor_3(float);
virtual ~vektor_3();private:
float z;
};#endif // !defined(AFX_VEKTOR_3_H__5864BBC1_DA7C_4904_9781_19480B4994DA__INCLUDED_)
// Vektoren_schule.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//#include "stdafx.h"
#include "vektor_2.h"
#include "vektor_3.h"
#include <iostream>
using namespace std;void main()
{
vektor_2 objekt_1(12,30), objekt_2;
vektor_3 objekt_3;cout<<"Die vordefinierte Strecke (2-Dimensionen) ist "<<objekt_1.betrag()<<" [LE] lang!"<<endl;
objekt_2.eingabe();
objekt_2.ausgabe();
cout<<"Die eingegebene Strecke (2-Dimensionen) ist "<<objekt_2.betrag()<<" [LE] lang!"<<endl;objekt_3.eingabe_3d();
objekt_3.ausgabe_3d();
cout<<"Die Strecke im 3-Dimensionalen Koordinatensystem ist "<<objekt_3.betrag_3d()<<" [LE] lang!"<<endl;
} [/cpp]
Dies sollte jetzt funktionieren
-
Öhmm...
Was meinst du mit verändern ??
Es tut mir echt leid wenn ich mich so "Blöd" anstelle aber ich kapier's einfach nicht...
Du hast geschrieben "Diese sollte jetzt funktionieren" aber was meinst du mit diese und du hast ja auch garnichst im Quellcode verändert...
-
Ist nur eine kleine änderung, leicht zu übersehen:
Archon schrieb:
In der Angabe steht was wichtiges: Es soll x,y,z eingegeben werden können.
Das heißt du musst nur deine ausgeben-funktion in der klasse vektor_3 verändern, dann sollte es funktionieren
[cpp]
//TIPP:etwas geschickterer Konstruktor:
//vektor_3::vektor_3(float x1=0,float y1=0,float z1=0):vektor_2(x1,y1),z(z1)
//{}
//x,y,z werden mit 0 belegt wenn nichts angegeben wird, und der Konsturktor
//der anderen Klasse wird mittels Initialisierungsliste aufgerufen
void vektor_3::eingabe_3d()
{
//NEU: Eingabefunktion von vektor_2 aufrufen.
this->eingabe();
cout<<"Bitte geben sie einen Z-Wert in [LE] ein: ";
cin>>z;
}
[/cpp]
Dies sollte jetzt funktionierensry, habe eingebenfunktion gemeint
Es heißt in deiner Angabe nämlich nicht, dass die werte von objekt2 die gleichen sein müssen wie in objekt3, sondern dass die klasse abgeleitet sein soll und die eingabefunktion der vektor_2 klasse auch benutzt werden soll.
Durch das aufrufen von der Eingabefunktion der vektor_2 klasse werden x und y für objekt3 eingelesen, und somit nutzt du im Grunde eine Funktion der Klasse vektor_2. Ich jedenfalls habe die Angabe so verstanden.
-
Aber anders ist es nicht möglich oder wie ?
-
...Und gibt es keine Möglichkeit die Werte der Variablen die ich in vektor_2 eingegeben habe an vektor_3 zu übergeben??
-
Weiß denn keiner wie das zu realisieren ist? ?
-
ddoopio schrieb:
...Und gibt es keine Möglichkeit die Werte der Variablen die ich in vektor_2 eingegeben habe an vektor_3 zu übergeben??
Nur um etwas Klarzustellen: Das kannst du schon, aber nicht auf deine Weise, da du unterschiedliche Objekte von vererbten Klassen erstellt hast, die voneinander unabhängig sind. Man kann sich das so vorstellen: "Klassen sind die Pläne, Objekte sind nach dem Plänen entworfene Gebäude"(Zitat meines Programmieren-Professors). Wenn man ein objekt der klasse vektor_2 anlegt und eines der klasse vektor_3 ;dann hat vektor_2 eigene Variablen und vektor_3 eigene Variablen.
du könntest es etwas unschön machen:
-du überladest den =operator
-dann erstellst du einen pointer(p_vektor_2) der Klasse vektor_2
-dann:p_vektor_2= new vektor_3;
-dann:
*p_vektor_2=objekt2;
-und als letztes ein sog. downcast ,leider weiß ich nicht mehr genau die syntax
Nur eine Frage: wozu brauchst du das, wenn in der Angabe klar drinsteht dass man bei vektor_3 x,y,z noch iengeben muss?
-
Alles klar hab's zwar nicht so ganz kapiert aber is ja egal!
Ich wollt es halt nur mal wissen.Also Großen Danke an alle