2012-04-09 20 views
1

次週のC++のテストがあり、自分自身を準備しています。私は次のように2つのクラスがあると混乱します。私は行ごとにコードの実行を進めなければならず、マークされた行(x = ...y = ...の中にclass two)が混乱しています - 実行はどこから行なわれますか?別のクラスの中でクラスのコンストラクタを呼び出す

#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

どのような問題がありますか?あなたは何をしようとしているのですか? – Cascabel

+0

私がx = one(a、b)になったとき。私はその後にどこに行くべきかわかりません。 – Jack

+0

「どこに行くの?」と「行く場所」とはどういう意味ですか?プログラムの実行を1行ずつトレースしようとしていますか? – Cascabel

答えて

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

何このコードが行うことは、それがクラスoneのコンストラクタを呼び出し、変数xyに、このクラスの新しく作成されたインスタンスを割り当てることです。

クラスoneのコンストラクタは、ラインx = one(a, b);それが one(int a, int b) を行にジャンプ から9行目

+0

xとyにはどのような価値がありますか? – Jack

+0

'two'のコンストラクタに与える値によって異なります。メインクラスを実行すると、 't2'の' x = one(4,2) 'と' y = one(8,3) 'となります。 't1'の' x'と 'y'は、他の適切なコンストラクタを使っているので、どのように作成しないのでしょうか。 – Radix

+0

@ahmadhussain 'x.n'は値' a'を持ち、 'x.m'は値' b'を持ち、 'y.n'は値' c'を持ち、 'y.m'は値' d'を持ちます。 – FlyingFoX

3

にあり、ラインy = one(c, d);

1

現在も同じone

のパラメータ化コンストラクタを実行アプローチは、あるクラスにデフォルトコンストラクタがある場合にのみ機能します。 コンストラクタの初期化リストのメンバを初期化する方が良いです。

two(int a, int b, int c, int d) 
    : x(a,b), y(c,d) 
{ 
     cout << "made one two\n"; 
} 
関連する問題