2017-01-08 2 views
0

Ich fange an, über C++ - Klassen zu lernen, und ich habe ein Problem. Ich habe über Konstruktoren und Initialisierungslisten gelesen, aber ich kann mein Problem immer noch nicht lösen.C++ Aufruf eines anderen Klassenkonstruktors

-Code in foo.h:

class point{ 
    public: 
    double x,y; 
    point(double x1, double y1); 
}; 

class line: public point{ 
    public: 
    double A,B,C; 
    double distance(point K); 
    line(point M, point N); 
}; 

Und in foo.cpp:

point::point(double x1, double y1){ 
    x=x1; 
    y=y1; 
} 
line::line(point M, point N){ 
    if(M.x!=N.x){ 
     A=-(M.y-N.y)/(M.x-N.x); 
     B=1; 
     C=-(M.y-A*M.x); 
    } 
    else{ 
     A=1; 
     B=0; 
     C=-M.x; 
    } 
} 

Natürlich funktioniert es nicht, denn ich weiß nicht, wie in Zeile Punkt Konstruktor aufzurufen Konstrukteur. Wie kann ich das machen ? Ich möchte etw wie das tun:

point A(5,3),B(3,4); 
line Yab(A,B); 
+0

Blick up getters und setters - aka machen Membervariablen nicht öffentlich –

+2

Warum sollte 'line' von' point' erben? Es hat keinen Nutzen für die Punktattribute 'x' und' y'. – lucianopaz

+0

Oh fck es funktioniert: D Ich habe nur die Vererbung entfernt. –

Antwort

2

warum aus der Klasse Point-Klasse Linie erben? Lösung: 1 - nicht erben von Punkt 2 - Fügen Sie der Line-Klasse zwei Eigenschaften hinzu: Point _p1, _p2, und initialisieren Sie sie dann vom Konstruktor Line :: Line (Punkt A, Punkt B) {_p1 = A; _p2 = B;}

ps nicht mit Geschäftslogik und Zugriffsmuster Messing

pps, wenn Sie von abgeleiteten Klasse dh Basiskonstruktor nennen wollen:

class Base {} 
class Derived: public Base 
{ 
     Derived() : Base() {} 
} 

oder

Derived::Derived() : Base() 
{ 
}  
+0

Danke. Ich habe es gelöst. –

Verwandte Themen