К примеру:
class interface
{
public:
virtual void do_something()
{
something..
}
}
class base : public interface
{
public:
virtual void do_something()
{
somethingElse..
}
}
class child : public interface, public base
{
public:
override void do_something()
{
somethingDifferent..
}
}
class child2 : public interface, public base
{
public:
override void do_something()
{
somethingDifferent..
}
}
Мне нужно, чтобы объекты класов child и child2, к примеру находились в одном массиве. Если я создам массив элементов base, я смогу обращаться к ним через интерфейс? Или обязательно создавать массив объектов interface? Т. е. если я укажу тип данных base для массива, компилятор все равно выделит память под полный тип данных объекта включая interface? Или нет?
Если вы создадите массив объектов base, то, как вы понимаете, каждому объекту будет выделена память только под base, и вы получите при присваивании срезку.
Используйте массив указателей на base - и все получится :)
Еще - непонятно, зачем вы делаете child производным и от base, и от interface, при том, что interface является производным от base. Не то чтобы это было запрещено... но это очень специфичное решение, которое вряд ли вам необходимо, скорее, вы немного недоразобрались в вопросе.
Да, и override пишется с другой стороны объявления :)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей