Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как наследовать только часть класса?


Автор: Ice08 3.8.2008, 12:13
Вычитал в Дейтеле что можно наследовать только нужные элементы класса, а не весь класс, можете кинуть пример.

Автор: Necias 3.8.2008, 13:34
Ты про это
Код

class foo1{
private: //доступа к этим функциям в наследнике не будет
    void fun1(){}
    int a1;
public: //а к этим - будет
    void fun2(){}
    int a2;
};

class foo2: public foo1{
    public foo2(){
        fun1();  //ошибка, fun1 не унаследован
        fun2();  //нормально, унаследовано
    }
};

Автор: Daevaorn 3.8.2008, 13:38
Цитата(Necias @  3.8.2008,  14:34 Найти цитируемый пост)
 fun1();  //ошибка, fun1 не унаследован

Глупость. Наследование всегда полное. Если нет доступа к каким-то членам - это не значит что их нет.

Поскольку наследование реализует концепцию `is a`, то "частичное наследование" не наследование вовсе.

Автор: Ice08 3.8.2008, 13:44
класс foo2 наследует только fun2();,
а  int a2; в этом производном классе нет? 
Цитата

Цитата(Necias @  3.8.2008,  14:34 )
 
Цитата

fun1();  //ошибка, fun1 не унаследован



Глупость. Наследование всегда полное. Если нет доступа к каким-то членам - это не значит что их нет.

согласен

Автор: Necias 3.8.2008, 14:58
Цитата(Daevaorn @  3.8.2008,  13:38 Найти цитируемый пост)
Глупость. Наследование всегда полное. Если нет доступа к каким-то членам - это не значит что их нет.

Поскольку наследование реализует концепцию `is a`, то "частичное наследование" не наследование вовсе. 

Ответил на вопрос в меру понимания возможностей языка smile . Хотя, признаю, строчку "fun1 не унаследован" написал с горяча. Действительно, просто нет доступа.
Ice08, а можно ссылку на источник?

Автор: Ice08 3.8.2008, 22:21
В книге Дейтела глава вроде 9.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)