Below is a pseudo declaration for a multilevel inheritance.
Base class (protected int data)
derived1 : virtual public base (protected int data1)
derived2 : virtual public base (protected int data2)
derived3 : derived1,derived2 (private int data3)
Main(){ base b; derived1 d1; derived2 d2; derived3 d3; }
sizeof(b) // 4 which is correct as only int (4bytes)
sizeof(d1) // 12 why not 8 -> 4(base) + 4(derived)
sizeof(d2) // ??? whatever applies above should apply here
sizeof(d3) // 24 why not 12 -> 4(base) + 4(derived1/derived2) + 4(d3).
Имеет ли размер также и виртуальные таблицы. Опять же здесь не может быть виртуальной таблицы, поскольку никакая виртуальная функция не определена. Пожалуйста, помогите уточнить мои сомнения.Размер объектов при многоуровневом/множественном наследовании
PS: То, что я понял до сих пор:
Unless the function is declared virtual in base class,
base *bptr;
derived d;
bptr = &d;
bptr->fun(); // will call the base class function.
But if the fun() is declared virtual then the above code will call derived class fun().
Возвратный тип 'void' не будет работать. Он должен вернуть объект. Я не понимаю, как это у вас получилось: http://coliru.stacked-crooked.com/a/be4074970d5da3cb. Если вы ищете образец кода, есть уже [вопрос] (http://stackoverflow.com/questions/4421706/operator-overloading) о перегрузке оператора с образцом кода. – chris
Вы даже попытались скомпилировать его? Как вы устали? http://ideone.com/BUh2nh говорит 'error: return-statement со значением, в функции, возвращающей 'void' [-fpermissive]'. – luk32
Извините за двойной комментарий, но эта «я попробовала» часть кажется большой ложью. -1 = (. – luk32