|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.11.2011, 19:13 | #1 |
Пользователь
Регистрация: 18.11.2011
Сообщений: 13
|
ооп, виртуальные функции c++
ооп, виртуальны е функции c++,
#include <iostream> #include <conio.h> #include <windows.h> #include <string.h> using namespace std; char bufRus [256]; char* Rus(char* mes) { CharToOem (mes, bufRus); return bufRus; } //базовый класс "Абитуриент" class Abitur { protected: char m_fio[80],m_adres[80],//ФИО, адрес m_ocenki[20]; //оценки по предметам public: Abitur(); virtual ~ Abitur(){} virtual void Display();//вывод описания virtual void Drug(); }; Abitur::Abitur() { //ввод ФИО, адрес и оценки абитуриента cout << Rus("\nФИО:"); cin.get(); cin.getline(m_fio,80); cout << Rus("\nАдрес:"); cin.get(); cin.getline(m_adres,80); cout << Rus("\nОценки:"); cin.get(); cin.getline(m_ocenki,80); } void Abitur:: Display() { cout << Rus("\nАбитуриенты:"); cout << Rus("\n ФИО:")<<m_fio; cout << Rus("\n Адрес:") << m_adres; cout << Rus("\n Оценки:") <<m_ocenki; } void Abitur:: Drug() { int stricmp(const char *m_adres, const char *m_adres); } //производный класс "Льготник" class Lgot : public Abitur { protected: char m_lgoti[80]; // льготы public: Lgot(); virtual ~ Lgot(){} virtual void Display(); //вывод описания книги }; Lgot::Lgot() { //ввод льгот cout << Rus("\nЛьготы:"); cin.getline(m_lgoti,80); } void Lgot::Display() {cout << Rus("\nАбитуриент льготник: "); cout << Rus("\nФио: ") << m_fio << " "; cout << Rus("\nАдрес: ")<< m_adres << " "; cout << Rus("\nОценки: ") <<m_ocenki<< " \n "; } // производный класс "журнал" class Sport : public Abitur { protected: char m_Sport; //вид спорта public: Sport(); virtual ~ Sport(){} virtual void Display();//вывод описания Льготники спортсмены }; Sport::Sport():Abitur() { //ввод номера журнала cout << Rus("\nВид спорта:"); cin >> m_Sport; } void Sport::Display() { cout << Rus("\nАбитуриент спортсмен: "); cout << Rus("\nФио: ") << m_fio << " "; cout << Rus("\nАдрес: ")<< m_adres << " "; cout << Rus("\nОценки: ") <<m_ocenki<< " \n "; } int main() { int nMenu, flag = 1, kol; int i = 0; //индекс нового абитуриента Abitur* p[100]; cout <<Rus("\nКоличество абитуриентов: ");cin >> kol; while(i < kol && flag) { // вывод пунктов меню cout<<Rus("\nВведите: ") << endl; cout<<Rus("1-для Льготников,2-для Спортсменов,3-выход\n"); cin >> nMenu; switch (nMenu) { case 1 : p[i++] = new Lgot(); break; case 2 : p[i++] = new Sport(); break; default : flag = 0; break; } } // вывод описаний абитуриентов for (int id = 0; id < kol; id++) { p[id]->Display(); delete p[id]; } getch(); } вот текст программы как в нем сделать виртуальную функцию друг которая сравнивала бы все адреса и выводила с одного города |
18.11.2011, 19:41 | #2 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Вы что-то напутали. Поэтому надо уточнить. В каком классе вам надо написать виртуальную функцию? И причем здесь слово "друг"? Или вам надо в одном классе написать виртуальную функцию, которая является другом для другого класса? Тогда укажите эти классы!
Со мной можно встретиться на www.clipper.borda.ru
|
18.11.2011, 19:43 | #3 |
Пользователь
Регистрация: 18.11.2011
Сообщений: 13
|
у меня следующие задание
Базовый класс «АБИТУРИЕНТ» описывает следующие данные об абитуриентах, сдав-ших вступительные экзамены в университет: ФИО; адрес; оценки по предметам. В состав класса входят следующие функции: виртуальная функция просмотра данных о абитуриен-тах; функция-друг, позволяющая определить количество абитуриентов, проживающих в заданном городе. Производный класс «АБИТУРИЕНТ-ЛЬГОТНИК» содержит следующие данные: описание льготы и переопределенную функцию просмотра информации об аби-туриентах, имеющих льготы при поступлении. Производный класс «АБИТУРИЕНТ-СПОРТСМЕН» содержит следующие данные: вид спорта, соревнования, награды и пере-определенный метод вывода данных об абитуриентах- спортсменах. |
18.11.2011, 19:46 | #4 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Опять ничего не понятно! функция-друг где должна быть объявлена и быть другом какого класса?!
Со мной можно встретиться на www.clipper.borda.ru
|
18.11.2011, 19:48 | #5 |
Пользователь
Регистрация: 18.11.2011
Сообщений: 13
|
функцией другом класса abitur
|
18.11.2011, 19:52 | #6 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
А в каком классе она должна быть объявлена? То есть, чтобы было понятно, вы эту функцию-друга называете виртуальной функцией, а виртуальной может быть лишь функция-член класса. Поэтому и не понятно, что вы хотите.
Со мной можно встретиться на www.clipper.borda.ru
|
18.11.2011, 19:53 | #7 |
Пользователь
Регистрация: 18.11.2011
Сообщений: 13
|
а хотя она должна быть другом классов, Abitur, Sport, Lgot, в ней должны сравниваться все города абитуриентов, с заданным городом и выводиться совпадающие
|
18.11.2011, 19:54 | #8 |
Пользователь
Регистрация: 18.11.2011
Сообщений: 13
|
#include <iostream>
#include <conio.h> #include <windows.h> using namespace std; char bufRus [256]; char* Rus(char* mes) { CharToOem (mes, bufRus); return bufRus; } //базовый класс "Абитуриент" class Abitur { protected: char m_fio[80],m_adres[80],//ФИО, адрес m_ocenki[20]; //оценки по предметам public: Abitur(); virtual ~ Abitur(){} virtual void Display();//вывод описания }; Abitur::Abitur() { //ввод ФИО, адрес и оценки абитуриента cout << Rus("\nФИО:"); cin.get(); cin.getline(m_fio,80); cout << Rus("\nАдрес:"); cin.get(); cin.getline(m_adres,80); cout << Rus("\nОценки:"); cin.get(); cin.getline(m_ocenki,80); } void Abitur:: Display() { cout << Rus("\nАбитуриенты:"); cout << Rus("\n ФИО:")<<m_fio; cout << Rus("\n Адрес:") << m_adres; cout << Rus("\n Оценки:") <<m_ocenki; } void Abitur:: Drug() { if(m_adres==m_adres)cout << Rus("\nАбитуриент льготник: "); cout << Rus("\nФио: ") << m_fio << " "; cout << Rus("\nАдрес: ")<< m_adres << " "; cout << Rus("\nОценки: ") <<m_ocenki<< " \n "; ; } //производный класс "Льготник" class Lgot : public Abitur { protected: char m_lgoti[80]; // льготы public: Lgot(); virtual ~ Lgot(){} virtual void Display(); //вывод описания книги }; Lgot::Lgot() { //ввод льгот cout << Rus("\nЛьготы:"); cin.getline(m_lgoti,80); } void Lgot::Display() {cout << Rus("\nАбитуриент льготник: "); cout << Rus("\nФио: ") << m_fio << " "; cout << Rus("\nАдрес: ")<< m_adres << " "; cout << Rus("\nОценки: ") <<m_ocenki<< " \n "; } // производный класс "Абитуриент" class Sport : public Abitur { protected: char m_Sport, m_sorevn,m_nagradi; //вид спорта public: Sport(); virtual ~ Sport(){} virtual void Display();//вывод описания Льготники спортсмены }; Sport::Sport():Abitur() { //ввод cout << Rus("\nВид спорта:"); cin >> m_Sport; cout << Rus("\nСоревнования:"); cin >> m_sorevn; cout << Rus("\nНаграды:"); cin >> m_nagradi; } void Sport::Display() { cout << Rus("\nАбитуриент спортсмен: "); cout << Rus("\nФио: ") << m_fio << " "; cout << Rus("\nАдрес: ")<< m_adres << " "; cout << Rus("\nОценки: ") <<m_ocenki<< " \n "; } int main() { int nMenu, flag = 1, kol; int i = 0; //индекс нового абитуриента Abitur* p[100]; cout <<Rus("\nКоличество абитуриентов: ");cin >> kol; while(i < kol && flag) { // вывод пунктов меню cout<<Rus("\nВведите: ") << endl; cout<<Rus("1-для Льготников,2-для Спортсменов,4-выход\n"); cin >> nMenu; switch (nMenu) { case 1 : p[i++] = new Lgot(); break; case 2 : p[i++] = new Sport(); break; case 3 : p[i++] = new Abitur(); break; default : flag = 0; break; } } // вывод описаний абитуриентов for (int id = 0; id < kol; id++) { p[id]->Display(); delete p[id]; } getch(); } |
18.11.2011, 19:56 | #9 |
Пользователь
Регистрация: 18.11.2011
Сообщений: 13
|
Вот я понял что это не виртуальна функция с именем друг, а функция-друг, а как ее сделать что то пока неочень, можно пример работы этой функции
|
18.11.2011, 20:00 | #10 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Тогда вам в базовом классе нужно объявить дружественную функцию. Она будет иметь доступ к адресу. Так как это поле базового класса, то эта функция будет иметь доступ к этому полю всех производных классов, так как будет неявное преобразование производного класса к базовому..
Со мной можно встретиться на www.clipper.borda.ru
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
виртуальные функции | vanek1 | Помощь студентам | 1 | 08.06.2011 17:49 |
Виртуальные функции-операции и friend'ы | megachuhancer | Общие вопросы C/C++ | 5 | 11.03.2011 15:38 |
ВИРТУАЛЬНЫЕ ФУНКЦИИ в Delphi | MaxMad | Помощь студентам | 0 | 30.05.2010 20:06 |
Виртуальные функции | bigory | Помощь студентам | 2 | 06.06.2009 22:44 |
НАСЛЕДОВАНИЕ И ВИРТУАЛЬНЫЕ ФУНКЦИИ С++ | ermac52 | Помощь студентам | 1 | 05.06.2009 11:03 |