Форум программистов, компьютерный форум CyberForum.ru

С++ наследование(при наследовании не работает дружественная функция) - C++

Восстановить пароль Регистрация
 
HUGO_GO
0 / 0 / 0
Регистрация: 15.03.2012
Сообщений: 13
23.12.2012, 20:07     С++ наследование(при наследовании не работает дружественная функция) #1
Здраствуйте, есть класс Врач, Пациент. Есть френд функция с этими классами. Все рабоатет. Создаю новый клас Терапевт, который наследуется от класса Врач. Создаю новую френд фукцию, аналогичну первой. Не работает. Не могу понять в чем проблема? Вопрос глупый, но может нельзя создавать френд фунции для наследованых классов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
23.12.2012, 20:19     С++ наследование(при наследовании не работает дружественная функция) #2
а покажите код,как вы это делаете
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
23.12.2012, 20:20     С++ наследование(при наследовании не работает дружественная функция) #3
Друзья не переходят по наследству, очевидно же.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
23.12.2012, 20:38     С++ наследование(при наследовании не работает дружественная функция) #4
а он не передавал, он переопределить ее пытается в наследнике, как я понял
HUGO_GO
0 / 0 / 0
Регистрация: 15.03.2012
Сообщений: 13
23.12.2012, 20:59  [ТС]     С++ наследование(при наследовании не работает дружественная функция) #5
Вы парвы, код большой, сложно показать

Добавлено через 9 минут
Класс Врач
Doctor.h
C++
1
2
class Patient;
friend void fromP2DS(Doctor &, Patient &);//from patient to  doctor
Doctor.cpp
C++
1
2
3
4
5
6
7
8
9
void fromP2DS(Doctor &d, Patient &p){
        list<Symptom>::iterator l = p.symptom_p.begin();
    while (l != p.symptom_p.end())
    {
        cout<<" "<<l->getNameSymptomm()<<",";
        d.s_p.push_back(l->getnumSymptomm()); 
        l++;     
    }
    cout<<endl;
Patient.h
C++
1
friend void fromP2DS(Doctor &, Patient &); //first visit a doctor
Terapevt.h
C++
1
2
3
4
5
6
7
8
class Terapevt :  public Cardiologist, public Gastroenterologist {
public :
    Terapevt()  {cout<<"constructor Terapevt is created."<<endl;} ;
    std::string spetsyfication;
private :
    void creat_diagnos1(void);//return diagnos
    void NotBigProblem(void);
};
Cardiologist и Gastroenterologist - виртуально наследуются от Врача(Doctor)

Добавлено через 5 минут
и в терапевте
C++
1
friend void fromP2TerS(Terapevt &, Patient &); //first visit a doctor
которая будет делать тоже самое что и
friend void fromP2DS(Doctor &, Patient &); //first visit a doctor
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
23.12.2012, 21:11     С++ наследование(при наследовании не работает дружественная функция) #6
а зачем вы используете дружественные функции? и по этим кускам кода я не вижу ошибки
HUGO_GO
0 / 0 / 0
Регистрация: 15.03.2012
Сообщений: 13
23.12.2012, 21:30  [ТС]     С++ наследование(при наследовании не работает дружественная функция) #7
Также о том подумал, что надо обойтись без дружественных функций. Думаю, аксесорами полусить занчение атрибутор однрого класса и передать другому.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2012, 21:36     С++ наследование(при наследовании не работает дружественная функция)
Еще ссылки по теме:

C++ Дружественная функция
C++ Дружественная функция класса
C++ Дружественная функция

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
23.12.2012, 21:36     С++ наследование(при наследовании не работает дружественная функция) #8
так в чем суть проблемы, если у вас есть приватные поля и вы кним хотите обратится, используйте get'еры и set'еры
дружественная функций нужна для того чтоб без привязки к классу обращатся к его приватным полям
Yandex
Объявления
23.12.2012, 21:36     С++ наследование(при наследовании не работает дружественная функция)
Ответ Создать тему
Опции темы

Текущее время: 06:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru