Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2012, 20:06   #11
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

смотри. Рассмотрим пример:

Код:
class neko
{
    public:
        void show_neko() const { cout <<"neko::void show_neko()\n";}
};

class neko_propagate :private neko
{
	public:
		friend ostream & operator<<(ostream & out, const neko_propagate & to_out);

        void Test()  {    show_neko();   }
};

ostream & operator<<(ostream & out, const neko_propagate & to_out)
{
	to_out.neko::show_neko();
	return out;
}

int main()
{

    neko_propagate test;

    test.Test();
    cout<< test;
}
В базовом классе метод - публичный. Но из-за приватного наследования, в наследнике он делается приватным. Соотвественно, снаружи никто доступа не имеет. Но сам потомок имеет доступ к публичному методу своего предка.
Поэтому, ты можешь вызвать метод Test(); внутри которого потомок толкнет метод предка.

теперь сделаей в предке метод приватным:



Код:
class neko
{
    private:
        void show_neko() const { cout <<"neko::void show_neko()\n";}
};

class neko_propagate :private neko
{
	public:
		friend ostream & operator<<(ostream & out, const neko_propagate & to_out);

        //: error C2248: neko::show_neko: невозможно обратиться к private член, 
        //объявленному в классе "neko"
        void Test()  {    show_neko();   }
};

ostream & operator<<(ostream & out, const neko_propagate & to_out)
{
//         : error C2248: neko::show_neko: невозможно обратиться к private член, 
//объявленному в классе "neko"
	to_out.neko::show_neko();
	return out;
}

int main()
{

    neko_propagate test;

    test.Test();
    cout<< test;
}
Потомок не имеет доступа к приватным данным предков. Соответственно - ошибки компиляции.

Если потомок не сможет получить доступ к данным предка, то и друзья потомка тоже соответственно не смогут этого сделать.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ наследование world12_tk Помощь студентам 1 05.01.2012 03:14
Наследование. ISV-777 Общие вопросы по Java, Java SE, Kotlin 1 05.12.2011 22:31
Наследование С++ Vasyl'eva Помощь студентам 0 04.12.2011 19:40
Наследование Сергей089 Помощь студентам 6 07.02.2010 12:04
Наследование beregok Общие вопросы C/C++ 1 04.07.2009 22:39