2012-04-09 22 views
1

Ich habe nächste Woche einen Test für C++ und bereite mich darauf vor. Ich bin verwirrt, wenn ich 2 Klassen habe, wie unten gezeigt. Ich muss Zeile für Zeile durch die Ausführung des Codes gehen und bin verwirrt über die markierten Zeilen (x = ... und y = ... innerhalb class two) - Wohin geht die Ausführung von dort?Konstruktor einer Klasse in einer anderen Klasse aufrufen

#include <iostream> 
using namespace std; 

class one { 
    int n; 
    int m; 
    public: 
    one() { n = 5; m = 6; cout << "one one made\n"; } 
    one(int a, int b) { 
     n = a; 
     m = b; 
     cout << "made one one\n"; 
    } 
    friend ostream &operator<<(ostream &, one); 
}; 

ostream &operator<<(ostream &os, one a) { 
    return os << a.n << '/' << a.m << '=' << 
     (a.n/a.m) << '\n'; 
} 

class two { 
    one x; 
    one y; 
    public: 
    two() { cout << "one two made\n"; } 
    two(int a, int b, int c, int d) { 
     x = one(a, b); //here is my problem 
     y = one(c, d); //here is my problem 
     cout << "made one two\n"; 
    } 
    friend ostream &operator<<(ostream &, two); 
}; 

ostream &operator<<(ostream &os, two a) { 
    return os << a.x << a.y; 
} 

int main() { 
    two t1, t2(4, 2, 8, 3); 
    cout << t1 << t2; 
    one t3(5, 10), t4; 
    cout << t3 << t4; 
    return 0; 
} 
+3

Was ist Ihr Problem? Was versuchst du zu machen? – Cascabel

+0

wenn ich zu x = eins (a, b) komme; Ich weiß nicht, wohin ich danach gehen soll. – Jack

+0

Was meinst du mit "wann ich komme" und "wohin"? Versuchen Sie, die Ausführung des Programms Zeile für Zeile nachzuverfolgen? – Cascabel

Antwort

3
x = one(a, b); //here is my problem 
y = one(c, d); //here is my problem 

dieser Code Was tut, ist, dass es den Konstruktor der Klasse one und ordnet die neu erstellte Instanz dieser Klasse auf die Variablen x und y nennt.

Der Konstruktor der Klasse ist one in Zeile 9

+0

ok. Welchen Wert haben x und y? – Jack

+0

Es hängt davon ab, welche Werte Sie dem Konstruktor von 'two' geben. Nach der Ausführung Ihrer Hauptklasse haben Sie (für 't2')' x = eins (4,2) 'und' y = eins (8,3) '. Beachten Sie, dass Sie 'x' und' y' nicht für 't1' erstellen, da es den anderen geeigneten Konstruktor verwendet. – Radix

+0

@ahmadhussain 'x.n' hat den Wert' a', 'x.m' hat den Wert' b', 'y.n' hat den Wert' c' und 'y.m' hat den Wert' d'. – FlyingFoX

3

von der Linie x = one(a, b); es one(int a, int b) und führt den parametrisierten Konstruktor one

gleiche für Linie y = one(c, d);

1

Strom an die Leitung springt Ansatz funktioniert nur, wenn Sie einen Standardkonstruktor in einer Klasse haben. Es ist besser, Mitglieder in der Liste der Konstruktorinitialisierung zu initialisieren:

two(int a, int b, int c, int d) 
    : x(a,b), y(c,d) 
{ 
     cout << "made one two\n"; 
} 
Verwandte Themen