访问不同类的功能

时间:2016-05-02 09:22:18

标签: c++

我试图通过从3个不同的类访问3个不同的函数(它们具有相同的名称)来更新数字的值,使其成为30。你能帮我么 ?我必须使用D类中的函数。我尝试创建3个不同的对象并将其应用于每个对象的功能,但它不起作用

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);


     }
};

2 个答案:

答案 0 :(得分:1)

您无法从D类访问A,B,C类的func方法,因为它们受到保护。

对于加入类的受保护方法,您的类应该是朋友或派生类。 否则,您需要将其可见性设置为公开。

更多阅读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);
}

答案 1 :(得分: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;
}
相关问题