2016-05-02 12 views
0

3つの異なるクラスから3つの異なる関数(同じ名前を持つ)にアクセスして、数値を30に更新しようとしています。手伝ってくれませんか ?私は3種類のオブジェクトを作成し、それらの各機能に適用してみましたクラスDの機能を使用する必要がありますが、それはあなたがfuncにDクラスからアクセスすることはできません異なるクラスの関数へのアクセス

using namespace std; 

int callA=0; 
int callB=0; 
int callC=0; 
class A 
{ 
protected: 
    void func(int & a) 
    { 
     a=a*2; 
     callA++; 
    } 
}; 

class B 
{ 
protected: 
    void func(int & a) 
    { 
     a=a*3; 
     callB++; 
    } 
}; 

class C 
{ 
protected: 
    void func(int & a) 
    { 
     a=a*5; 
     callC++; 
    } 
}; 

class D 
{ 
    int val; 
    public: 
     //Initially val is 1 
     D() 
     { 
      val=1; 
     } 

     //Implement this function 
     void update_val(int new_val) 
     { 

      A a; 
      B b; 
      C c; 
      c.func(b); 
      b.func(a); 


    } 
}; 
+0

あなたは何を達成しようとしていますか? – perencia

+0

私は関数new_value = 30を作るために、まずAからB、そしてCから3回アクセスする必要があります。 – Mihaela

+0

したがって、Aの関数から1 * 2。その後Bから2 * 3、Cから6 * 5 – Mihaela

答えて

1

を動作しませんでした彼らは保護されているので、A、B、Cクラスのメソッド。

クラスの保護されたメソッドにアクセスするには、クラスはフレンドまたは派生クラスでなければなりません。 それ以外の場合は、公開設定を公開に設定する必要があります。より多くの派生クラスを使用してhere

を読んで、これは動作するはずのために

using namespace std; 

int callA=0; 
int callB=0; 
int callC=0; 
class A 
{ 
protected: 
    void func(int & a) 
    { 
     a=a*2; 
     callA++; 
    } 
}; 

class B 
{ 
protected: 
    void func(int & a) 
    { 
     a=a*3; 
     callB++; 
    } 
}; 

class C 
{ 
protected: 
    void func(int & a) 
    { 
     a=a*5; 
     callC++; 
    } 
}; 

class D : public A, public B, public C 
{ 
    int val; 
    public: 
     //Initially val is 1 
     D() 
     { 
      val=1; 
     } 

     //Implement this function 
     void update_val(int new_val) 
     { 
      // if new_val is '1' 
      //now you can call func methods; 
      A::func(new_val); 
      B::func(new_val); 
      C::func(new_val); 
      // then if you print new_val it is '30' 
      // c.func(b); // You can't pass b. b isn't an integer 
      // b.func(a); // idem 


    } 
}; 

// ..... //

int main(){ 
    D d; 
    d.update_val(1); 
} 
+0

@MichaelWalz私は40分前に謝罪しました。私の答えでは、クラスを派生させる方法のリファレンスがあります。または、友人のクラスを使用する..私の答えはすべての可能な答えをカバーします。 – granmirupa

+0

@MichaelWalzただし、複数の継承を使用して更新します。 – granmirupa

+0

OK、これは奇妙な問題の可能な解決策です。 –

0
#include<iostream> 
using namespace std; 

int callA=0; 
int callB=0; 
int callC=0; 
class A 
{ 
public: 
    void func(int & a) 
    { 
     a=a*2; 
     callA++; 
    } 
}; 

class B 
{ 
public: 
    void func(int & a) 
    { 
     a=a*3; 
     callB++; 
    } 
}; 

class C 
{ 
public: 
    void func(int & a) 
    { 
     a=a*5; 
     callC++; 
    } 
}; 

class D 
{ 

    public: 
     int val; 
     //Initially val is 1 
     D() 
     { 
      val=1; 
     } 

     //Implement this function 
     void update_val() 
     { 

      A a; 
      B b; 
      C c; 
      a.func(val); 
      b.func(val); 
      c.func(val); 


    } 
}; 

int main() 
{ 
    D d; 
    d.update_val(); 
    std::cout<<d.val<<std::endl; 

    return 0; 
} 
+0

OPの要件を満たしていません:彼のコメントを参照してください:_私は更新機能を書く必要があるので、はい、それらの機能は保護する必要があります_ –

関連する問題