0

クラスAとBなど、2つのクラスがあります。Bは、プライベートでのAのカプセル化です。

class A
{
   private:
    int x;
    int y;
    B b;

    public:
           void set(int , int, int, int, int);
           void setX(int);
           void setY(int);
           string toString();
 };

void A::set(int high, int low, int middle)
{
   B(high, low, middle);
   setX(x);
   setY(y);

}


void A:: setX(int x)
{
this -> x = x;    
}

void A:: setY(int y)
{
    this -> y = y;
 }

string A::toString()
{

       string str;
   ostringstream convert;
   convert << getlow();
   str = convert.str();

return str;
}


class B
{
     private:
             int low;
             int middle;
             int hight;

     public:
            B();
            B(int, int, int);
            int getLow();
            int getMiddle();
            int getHigh();
};

私のintメインの別のクラスで

int main ()
{
   int test1,test2,test3,test4,test5;

   // with lots of codes

   A a;
   a.set (test1,test2,test3,test4,test5);


}

int main からいくつかの値を取得すると、オブジェクト B を初期化する 3 つの値を set に渡します。getB 関数を使用すると、値が 0 になるか、まったく表示されません。(引数を取り、すべての int を 0 に設定するコンストラクターがあります)。誰かが私を啓発できますか?そして、これを使わないように言わないでください。私はC ++を初めて使用するので、ガイドしてください。

4

2 に答える 2

1

少なくとも次の方法でクラス A の定義を変更します

class A
{
    private:
             B b;
             int x;
             int y;

    public:
           void set(int, int, int);
           int getB();
 };

void A::set(int high, int low, int middle)
{
   b = B(high, low, middle);

}

int A::getB()
{

    return b.getLow();
}
于 2013-10-18T17:10:50.533 に答える
1

あなたのセットでは、bメンバー変数を初期化しません:

A::set(int high, int low, int middle)
{
   B(high, low, middle);
}
于 2013-10-18T17:11:10.943 に答える