Accessing Inherited Functions

You are given three classes A, B and C. All three classes implement their own version of func.

In class Afunc multiplies the value passed as a parameter by :

class A
{
public:
A(){
callA = 0;
}
private:
int callA;
void inc(){
callA++;
}

protected:
void func(int & a)
{
a = a * 2;
inc();
}
public:
int getA(){
return callA;
}
};

In class Bfunc multiplies the value passed as a parameter by :

class B
{
public:
B(){
callB = 0;
}
private:
int callB;
void inc(){
callB++;
}
protected:
void func(int & a)
{
a = a * 3;
inc();
}
public:
int getB(){
return callB;
}
};

In class Cfunc multiplies the value passed as a parameter by :

class C
{
public:
C(){
callC = 0;
}
private:
int callC;
void inc(){
callC++;
}
protected:
void func(int & a)
{
a = a * 5;
inc();
}
public:
int getC(){
return callC;
}
};

You are given a class D:

class D 
{

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


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


}
//For Checking Purpose
void check(int); //Do not delete this line.
};

You need to modify the class D and implement the function update_val which sets D‘s val to new_val by manipulating the value by only calling the func defined in classes A, B and C.

It is guaranteed that new_val has only  and  as its prime factors.

Input Format

Implement class D‘s function update_val. This function should update D‘s val only by calling A, B and C‘s func.

Constraints

 new_val 
Note: The new_val only has  and  as its prime factors.

Sample Input

new_val 

Sample Output

A‘s func will be called once.
B‘s func will be called once.
C‘s func will be called once.

Explanation

Initially, val .

A‘s func is called once:

val = val*2  
val = 2

B‘s func is called once:

val = val*3
val = 6

C‘s func is called once:

val = val*5
val = 30

Solution Implementation


class D :public A,B,C
{

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


         //Implement this function
         void update_val(int new_val)
         {
             int a = new_val;
             while(new_val!=0)
             {
                 if(val==a)
                    break;
                 if(new_val%2==0)
                 {
                     A::func(val);
                     new_val/=2;
                 }
                 else if(new_val%3==0)
                 {
                     B::func(val);
                     new_val/=3;
                 }
                 else if(new_val%5==0)
                 {
                     C::func(val);
                     new_val/=5;
                 }
             }

         }
         //For Checking Purpose
         void check(int); //Do not delete this line.
};
Copied!

Leave a Reply

Your email address will not be published. Required fields are marked *