Здравствуйте, AlexGin, Вы писали:
AG>У класса может быть только один деструктор!
Спасибо! А вот так можно делать?
class Interface1 {
public:
virtual ~Interface1() {} // vtbl[0]
virtual void doSomething() = 0; // vtbl[1] Такой же как и в Interface2, но на первой позиции в vtbl
virtual void doSomething1() = 0; // vtbl[2]
};
class Interface2 {
public:
virtual ~Interface2() {} // vtbl[0]
virtual void doSomething2() = 0; // vtbl[1]
virtual void doSomething() = 0; // vtbl[2] Такой же как и в Interface1, но на второй позиции в vtbl
};
class SomeClass : public Interface1,
public Interface2
{
public:
~SomeClass(); // vtbl[0]
void doSomething1() override; // vtbl[1]
void doSomething2() override; // vtbl[2]
void doSomething() override; // vtbl[3]
//...
};
std::unique_ptr<Interface1> obj1(new SomeClass());
std::unique_ptr<Interface2> obj2(new SomeClass());
obj1->doSomething();
obj2->doSomething();
Тут все то же самое что и с деструкторами? Метод doSomething() можно вызывать через любой интерфейс? Не зависимо от того на каком месте он в интерфейсах объявлен?