хай ту олл. смотрел 2 книги на эту тему... везде описывают по разному? неужели нет определенного стандарта и нормального объяснения как работает virtual int a() и friend int b() ? кто-нить может объяснить что такое первое и что такое второе? все возможности и нормально и по русски?
Первое. Дело в том, что Указателю на базовый класс можно присваивать значение указателей на классов потомков. Допустим, у нас есть такая картина: Код (Text): class a { ............ virtual int test(); int test2(); }; .... class b : public a { virtual int test(); int test2(); }; и есть указатель a* pointer; теперь: pointer = new a; pointer->test(); Вызывается a::test(); pointer->test2(); Вызывается a::test2(); pointer = new b; pointer->test(); Вызывается b::test(); pointer->test2(); Вызывается a::test2(); Второе. Как ты наверное знаешь, есть private свойства и методы какого либо класса, protected и public. Если ты хочешь, чтобы int b() могла получить доступ к приват и протектед данным и функциям, то ты должен в этом классе объявить функцию-друга (или дружественный класс), которая получит доступ: Код (Text): class a { private: int c; ............ friend int b(); } int b() { a* pointer = new a; pointer->c = 0; ---------> Теперь такое допустимо };
спасибо. http://www.cplusplus.com/doc/tutorial/polymorphism.html тут тоже есть. но разница в том что там указали один раз virtual, а вы - два... опять нет однозначности... но суть уже понимаю. спасибо.
ltshck в классах потомках переопределяемый метод, объявленный как virtual в классе-родителе, можно не предварять этим ключевым словом, "virtual". это вводит небольшую путаницу при рассмотрении таких классов, но так не запрещено делать. тебя, видимо, именно это и смутило © "C++ in a Nutshell"
а дополнительные, интересные возможности virtual знает кто? например вот это: virtual int a() = 0; не везде описано... а вещь клевая. тоже касается friend. это только классу? а к типу string (классу std::string) или int стандартному подходит? и как?
ltshck Не понимаю почему чисто_виртуальные_классы именно "клевая" вещь... Что же касается френдов, то класс может зафрендить другие классы и функции. Указание френдов - это всего лишь раздача прав на доступ к приват/протектед методам и полям...
ltshck, RTFM. ps: а вообще, имха, этот топик надо было в разделе C/C++ на форуме размещать. по С++, однако.
про friend operator + (class1 a, class2 b); friend operator + (class2 a, class1 b); никто так и не написал. видимо не знал. вот я и спрашивал, есть ли еще такие красивые вещи... так как не в каждой RTFM описаны такие тонктости.
ltshck А что, тебе должны были ОСОБО написать про operator +? Учись читать между строк и делать выводы из прочитанного...
ltshck Есть. ANSI ISO IEC 14882. В любом учебнике/хелпе по С++. Либо всему классу, либо его конкретной функции. Первому можно, второе не имеет смысла. Страуструп написал. РТФМ, однако. По всем вопросам. varnie Конкретно этому топику не место там, т.к. никакой полезной информации участникам форума не несёт. ТС разберётся и всё, а через некоторое время будет чистка подфорума.