Доступ к отдельным классам производного класса, производного от двух одинаковых базовых классов

у меня есть базовый класс называется Number, Учебный класс One а также Two получены из Number,
Теперь я определяю другой класс Threeгде мне нужно получить доступ к отдельным базовым классам из множественное наследование:


class Number{
protected:
int val;
public:
Number(){
val=0;
}
void Add(Number n){//Receives another Number class instance and add the value
val+=n.val;
}
};

//class One derived from Number
class One:public Number{
public:
One(){
cal=1;
}
};

//class two derived from Number
class Two:public Number{
public:
Two(){
val=2;
}
};

class Three:public One,public Two{
public:
Three(){
Two::Add(One);//--How can i pass instance of class One Here
}
};

Я пробовал One :: Number и Two :: Number, но безрезультатно.

0

Решение

Это должно работать:

Two::Add(*(One*)this);
-1

Другие решения

Есть несколько проблем, во-первых val является частным и так, что должно быть сделано protected, Далее у вас есть алмаз смерти так что вам нужно virtual public за One а также Two, Вы также пытаетесь позвонить Add используя type но тебе нужен instance каждого класса:

class Number{
protected:
int val;
public:
Number(){
val=0;
}
void Add(Number& n){//Receives another Number class instance and add the value
val+=n.val;
}
};

//class One derived from Number
class One:virtual public Number{
public:
One(){
val=1;
}
};

//class two derived from Number
class Two:virtual public Number{
public:
Two(){
val=2;
}
};

class Three: public  One,  public  Two{
public:
Three()
{
Two t1 ;
Add(t1 );//--How can i pass instance of class Two Here
}
};

Можно утверждать, что с помощью protected данные плохие, но это зависит на ваше дело но чтобы быть полным, это также выбор сохранить val private член данных и использовать protected constructor и это будет выглядеть так:

class Number{
private:
int val;
protected:
Number( int n ) : val(n) {}
public:
Number(){
val=0;
}
void Add(Number& n){//Receives another Number class instance and add the value
val+=n.val;
}
};

class One: virtual public Number{
public:
One() : Number( 1 ) {

}
};

class Two: virtual public Number{
public:
Two() : Number(2) {
}
};
0

Вам нужно создавать объекты соответствующих типов.

class Three : public One, public Two
{
public:
Three()
{
Add(One());
Add(Two());
}
};

Но я не понимаю, зачем тебе здесь МИ. Наследование от числа будет достаточно.

-1

Проблема не только в синтаксисе. Но что именно вы пытаетесь сделать?

Вы можете. Но где пример One объявили? Вы должны объявить это первым. Помните Two::Add(One); это не декларация, а оператор вызова.

То, что вы делаете, эквивалентно, скажем,

process_number(One);

Где номер процесса является функцией.

-1
По вопросам рекламы [email protected]