оператор присваивания и private наследование
От: Аноним  
Дата: 17.06.11 07:47
Оценка:
class base
{
};

class derived : private base
{
};

int main()
{
    base* b = 0;
    derived* d = 0;

    b = d;

    return 0;
}



Почему при компиляции ошибка в строке "b = d;". Что с логической точки зрения происходит при присваивании указателей?
Re: оператор присваивания и private наследование
От: _niko_ Россия  
Дата: 17.06.11 08:03
Оценка:
Здравствуйте, Аноним, Вы писали:


А>
А>class base
А>{
А>};

А>class derived : private base
А>{
А>};

А>int main()
А>{
А>    base* b = 0;
А>    derived* d = 0;

А>    b = d;

А>    return 0;
А>}
А>



А>Почему при компиляции ошибка в строке "b = d;". Что с логической точки зрения происходит при присваивании указателей?


При присваивании указатели "приводятся к одному знаменателю", а точнее к типу переменной b, а именно к типу base*.
Т.к. привидением типа занимается кто то "внешний" для объекта класса derived то и доступ к его базовому классу не имеет, тоесть не может преобразовать.

Как то так
Re: оператор присваивания и private наследование
От: breee breee  
Дата: 17.06.11 08:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему при компиляции ошибка в строке "b = d;". Что с логической точки зрения происходит при присваивании указателей?


Происходит попытка использовать Принцип подстановки Лисков — трактовать указатель на объект производного класса как указатель на объект базового.
ППЛ применяется только для объектов состоящих в отношении IS-A. В C++ это отношение выражается при помощи открытого наследования. Закрытое наследование (ака наследование реализации) означает отношение между объектами по типу HAS-A. Поэтому к нему принцип Лисков не применим.
Re: оператор присваивания и private наследование
От: BulatZiganshin  
Дата: 17.06.11 11:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>class derived : private base

А>Почему при компиляции ошибка в строке "b = d;".

потому что наследование приватное

А>Что с логической точки зрения происходит при присваивании указателей?


приватное наследование означает что ты стесняешься своих родителей и хочешь чтобы никто об этом не узнал. вот main и не знает, что base на самом деле твой родитель
Люди, я люблю вас! Будьте бдительны!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.