Недавно я посетил одно техническое интервью на С++: во время этого интервьюера задал мне один вопрос, на который я не смог ответить: даже я пробовал в Интернете и на некоторых форумах, но не смог получить ответ, см. ниже фрагмент кода:
using namespace std;
class Base1
{
public:
Base1()
{
cout << "Base1 constructor..." << endl;
}
~Base1()
{
cout << "Base1 Destructor..." << endl;
}
};
class Base2
{
public:
Base2()
{
cout << "Base2 constructor..." << endl;
}
~Base2()
{
cout << "Base2 Destructor..." << endl;
}
};
class Derived : public Base1, public Base2
{
public:
Derived()
{
cout << "Derived constructor...." << endl;
}
~Derived()
{
cout << "Derived Destructor..." << endl;
}
};
int main()
{
cout << "Hello World" << endl;
Base1 b1; Base2 b2;
Derived d1;
return 0;
}
Описание. Существует два базовых класса с именем Base1 и Base2 и один производный класс с именем Derived. Производное несколько унаследовано от Base1 и Base2.
Вопрос: Я хочу, чтобы Derived был унаследован только из одного класса, а не из обоих. Если разработчик попытается наследовать от обоих классов: тогда ошибка должна сгенерироваться: позвольте мне подвести итог:
- Scenerio 1: класс Derived: public Base1//Ok.--- > No Error
- Scenerio 2: класс Derived: public Base2//Ok.--- > No Error
- Scenerio 3: класс Derived: public Base1, public Base2//Ошибка или исключение или что-то еще. Не удалось наследовать.
Примечание. Можете ли вы ответить на эту проблему: я действительно не уверен, насколько это возможно или нет. И еще одно: это не проблема с алмазами.
Спасибо.