Здравствуйте, imh0, Вы писали: I>Жестковато конечно... ) Но зато "есть о чем поговорить" (Ц)...
Так и пишите явно что вы хотите, виртуальное же наследование.
Здравствуйте, imh0, Вы писали:
I>Предлагаю еще тему... ))
I>И сразу предлагаю свою... I>Вопросы для глумления на собеседовании....
Лучше использовать недавние нашумевшие невидимые символы (https://certitude.consulting/blog/en/invisible-backdoor/),
и демонстрировать собеседнику код на ноутбуке,
спрашивать что он напечатает, а потом показывать как он ошибался
и спрашивать в чем же дело, но доступа к клавиатуре не давать.
Типа такого:
Здравствуйте, imh0, Вы писали:
I>1) Что будет распечатано и почему?...
__PRETTY_FUNCTION__ — нестандартный макрос идентификатор из зарезервированного множества. Возможно, что код не скомпилируется, в любом случае вывод зависит от компилятора.
Здравствуйте, B0FEE664, Вы писали:
BFE>__PRETTY_FUNCTION__ — нестандартный макрос идентификатор из зарезервированного множества. Возможно, что код не скомпилируется, в любом случае вывод зависит от компилятора.
Здравствуйте, imh0, Вы писали:
_>>Так и пишите явно что вы хотите, виртуальное же наследование. I>Ты о чем? Не очень понял. Но тем не менее, хоть бы ты ответил на поставленные вопросы, а то походу мало кто понял о чем речь. ))
Виртуальное базирование — это как умение охотится на огнедышащих драконов: в теории интересно, а на практике не нужно.
Вот, кстати, вопрос из той же категории: зачем может понадобится следующая конструкция:
class A;
class A_lock {
friend class A;
private:
A_lock() {}
A_lock(const A_lock&) {}
};
class A : public virtual A_lock {
// ...public:
A();
A(char*);
// ...
};
Здравствуйте, B0FEE664, Вы писали:
BFE>Виртуальное базирование — это как умение охотится на огнедышащих драконов: в теории интересно, а на практике не нужно.
а на практике с плюсах нет интерфейсов, и приходится использовать виртуальное наследование
Здравствуйте, imh0, Вы писали:
_>>Так и пишите явно что вы хотите, виртуальное же наследование. I>Ты о чем? Не очень понял. Но тем не менее, хоть бы ты ответил на поставленные вопросы, а то походу мало кто понял о чем речь. ))
Чего не понятного? Тут виртуальное наследование и классам передают готового родителя, а не класс его создаёт. Так что вы можете явно указать кого хотите подсунуть.
Здравствуйте, imh0, Вы писали:
I>1) Что будет распечатано и почему?... I>2) Если убрать комментарии, Что будет распечатано и почему? ...
Те же вопросы:
#include <iostream>
#include <stdio.h>
template<class T>
T x = T{};
//template<int N>void f()
{
class Test
{
public:
Test()
{
PrintN(123);
}
void PrintN(int n)
{
printf("%d ", n);
}
};
Test t = x<Test>;
t.PrintN(345);
}
int main()
{
std::cout << "hello world\n";
return 0;
}
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, B0FEE664, Вы писали:
BFE>>Виртуальное базирование — это как умение охотится на огнедышащих драконов: в теории интересно, а на практике не нужно.
NB>а на практике с плюсах нет интерфейсов, и приходится использовать виртуальное наследование
Здравствуйте, fdn721, Вы писали:
BFE>>>Виртуальное базирование — это как умение охотится на огнедышащих драконов: в теории интересно, а на практике не нужно.
NB>>а на практике с плюсах нет интерфейсов, и приходится использовать виртуальное наследование
F>Зачем?
зачем интерфейсы или зачем виртуальное наследование?
NB>зачем интерфейсы ли зачем виртуальное наследование?
Да, раз мы уже заговорили про наследование, кто-нибудь знает ситуации в которых полезно private наследование? Я видел только примеры такого наследования для классов с методами (без данных), которые будут занимать лишнее место если их аггрегировать (по стандарту объект не может иметь размер 0 байт). При закрытом же наследовании лишнее место не используется и в тоже время мы не экспортим лишний интерфейс. Но с появление namespcace-ов непонятно зачем такие сложности.
П.С.
А "виртуальное базирование" это какой-то уже устоявшийся термин? Не нашел английское соответствие для него.
Здравствуйте, Максим, Вы писали:
М>Да, раз мы уже заговорили про наследование, кто-нибудь знает ситуации в которых полезно private наследование? Я видел только примеры такого наследования для классов с методами (без данных), которые будут занимать лишнее место если их аггрегировать (по стандарту объект не может иметь размер 0 байт). При закрытом же наследовании лишнее место не используется и в тоже время мы не экспортим лишний интерфейс. Но с появление namespcace-ов непонятно зачем такие сложности.