Сообщение Re[7]: Множественное наследование интерфейсов от 14.06.2018 5:51
Изменено 14.06.2018 5:54 Максим Рогожин
Re[7]: Множественное наследование интерфейсов
Здравствуйте, AlexGin, Вы писали:
AG>Ещё раз подчеркну: неоднозначности для компилятора — не будет, компилятор такой код успешно проглотит.
А как компилятор будет определять где в vtbl какой метод находится? Вот, например:
Как компилятор определяет сгенерировать какой код сгенерировать?
call vtbl[2]; // такой?
call vtbl[1]; // или такой?
AG>Ещё раз подчеркну: неоднозначности для компилятора — не будет, компилятор такой код успешно проглотит.
А как компилятор будет определять где в vtbl какой метод находится? Вот, например:
class Interface1 {
public:
virtual ~Interface1() {} // vtbl[0]
virtual void doSomething() = 0; // vtbl[1]
virtual void doSomething1() = 0; // vtbl[2] = void doSomething1()
};
class SomeClass : public Interface1,
public Interface2
{
public:
~SomeClass(); // vtbl[0]
void doSomething1() override; // vtbl[1] = void doSomething1()
void doSomething2() override; // vtbl[2]
void doSomething() override; // vtbl[3]
//...
};
std::unique_ptr<Interface1> obj1(new SomeClass());
obj1->doSomething1(); // как компилятор определяет где в vtbl находится метод doSomething1()?
// метод doSomething1() в Interface1 - это vtbl[2]
// но в классе SomeClass метод doSomething1() - это уже vtbl[1]
Как компилятор определяет сгенерировать какой код сгенерировать?
call vtbl[2]; // такой?
call vtbl[1]; // или такой?
Re[7]: Множественное наследование интерфейсов
Здравствуйте, AlexGin, Вы писали:
AG>Ещё раз подчеркну: неоднозначности для компилятора — не будет, компилятор такой код успешно проглотит.
А как компилятор будет определять где в vtbl какой метод находится? Вот, например:
Как компилятор определяет какой код сгенерировать?
AG>Ещё раз подчеркну: неоднозначности для компилятора — не будет, компилятор такой код успешно проглотит.
А как компилятор будет определять где в vtbl какой метод находится? Вот, например:
class Interface1 {
public:
virtual ~Interface1() {} // vtbl[0]
virtual void doSomething() = 0; // vtbl[1]
virtual void doSomething1() = 0; // vtbl[2] = void doSomething1()
};
class SomeClass : public Interface1,
public Interface2
{
public:
~SomeClass(); // vtbl[0]
void doSomething1() override; // vtbl[1] = void doSomething1()
void doSomething2() override; // vtbl[2]
void doSomething() override; // vtbl[3]
//...
};
std::unique_ptr<Interface1> obj1(new SomeClass());
obj1->doSomething1(); // как компилятор определяет где в vtbl находится метод doSomething1()?
// метод doSomething1() в Interface1 - это vtbl[2]
// но в классе SomeClass метод doSomething1() - это уже vtbl[1]
Как компилятор определяет какой код сгенерировать?
call vtbl[2]; // такой?
call vtbl[1]; // или такой?