A
LordJaxom schrieb:
vogel schrieb:
@KessiMC : die Funktion line kann nicht durch Konstruktor ersetzt werden, da die LINE selbst Objekte enthählt;
Was hat die Feststellung mit der Begründung zu tun?
Garnichts
@Vogel: Les dir ein anständiges C++ Buch durch (z.B. C++ Primer). Und arbeite es wirklich vom Anfang an durch. Konstrukoren dienen zur Initialisierung. Warum sollte ein Konstruktor hier nicht verwendet werden können?
Ganz davon abgesehen ist es eigentlich Ungewöhnlich Klassennamen komplett Groß zu schreiben (das tut man eigentlich bei Makros).
class Punkt
{
public:
Punkt(double x=0.0, double y=0.0)
: x(x), // Initialisierungsliste
y(y)
{
// <-- Hier erfolgt keine Initialisierung, sondern eine Zuweisung
}
Punkt deltaP(Punkt const & basis, Punkt const & delta) // Unnötige Kopien vermeiden
{
// Alternative zu deiner Schreibweise (Über Konstruktor):
return Punkt(
basis.x + delta.x,
basis.y + delta.y);
}
double x, y;
};
class Linie // Deutsch Englisch mischen? (Punkt/Linie, Point/Line)
{
public:
Linie()
: a(),
b()
{
}
Linie(Punkt const& p1, Punkt const& p2)
: a(p1),
b(p2)
{
}
// printl, besser lösen über:
// Sprechende Namen wären besser (printl und linel sind einfach nur... wenig aussagekräftig)
// - statische Methode mit übergabe der Linie
// - externe Funktion (dazü müssten x/y aber entweder Public sein oder eine Getter-Methode existieren).
// - nicht-statische Methode ohne Übergabe
// Variante1 (printl)
void Ausgabe() const // const weil die Methode nichts am Objekt ändert
{
cout << "Anfangspunkt: " << a.x << "/" << a.y;
cout << " Endpunkt: " << e.x << "/" << e.y << endl;
}
// Variante2 (printl)
static void Ausgabe(Linie const & linie)
{
cout << "Anfangspunkt: " << linie.a.x << "/" << linie.a.y;
cout << " Endpunkt: " << linie.e.x << "/" << linie.e.y << endl;
}
double Laenge() // Vorher linel
{
return sqrt(
fabs(linie->a.x - linie->e.x) +
fabs(linie->a.y - linie->e.y));
}
private:
PUNKT a, e;
};
int main()
{
Punkt p1(3,4);
Punkt p2(6,7);
Linie linie(p1, p2);
linie.Ausgabe(); // Über Variante 1 (non-static)
Linie::Ausgabe(linie); // Über Variante 2 (static)
}