Red Planet
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Вопрос о дружественных функциях. Цитата: Дружественные отношения не наследуются. Дружественные функции не имеют доступа к членам производного класса, чьи базовые классы содержали объявления этих функций. | Цитата отсюда, в книге прочитал примерно то же самое. Но почему тогда следующий код работает исправно (Количество комнат удваивается)? Цитата: #include <vcl> #pragma hdrstop #include <iostream> using namespace std; class building { int rooms, floors, area; public: void set_rooms (int num); int get_rooms (); friend int mult_two (building b1); }; //Производный класс. class house: public building { int bedrooms, baths; public: void set_bedrooms (int num); int get_bedrooms (); }; void building::set_rooms(int num) { rooms=num; } void house::set_bedrooms(int num) { bedrooms=num; } int house::get_bedrooms() { return bedrooms; } int building::get_rooms() { return rooms; } int mult_two (building b1) { return 2*b1.rooms; } //--------------------------------------------------------------------------- #pragma argsused int _tmain(int argc, _TCHAR* argv[]) { system ("title Temp"); building b; b.set_rooms(25); cout <<mult_two (b)<<'\n'; house h2; h2.set_rooms(15); cout <<mult_two (h2)<<'\n'; system ("pause"); return 0; } //--------------------------------------------------------------------------- | Догадываюсь, но не уверен. "Дети" наследуют переменные от своих "родителей". Дружественные функции и имеют доступ к этим унаследованным переменным (int rooms, floors, area в данном случае), но не имеют доступа к собственным переменным "детей" (int bedrooms, baths). Прав ли я? |