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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 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
По умолчанию

Цитата:
Сообщение от Алексей_ЕА Посмотреть сообщение
функцией другом класса abitur
А в каком классе она должна быть объявлена? То есть, чтобы было понятно, вы эту функцию-друга называете виртуальной функцией, а виртуальной может быть лишь функция-член класса. Поэтому и не понятно, что вы хотите.
Со мной можно встретиться на 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
По умолчанию

Цитата:
Сообщение от Алексей_ЕА Посмотреть сообщение
а хотя она должна быть другом классов, Abitur, Sport, Lgot, в ней должны сравниваться все города абитуриентов, с заданным городом и выводиться совпадающие
То есть у вас есть два класса: льготники и спортсмены, которые являются производными от класса абитуриент. И вам надо написать дружественную функцию к этим классам, которая будет выводить адреса проживания абитуриентов, так ?

Тогда вам в базовом классе нужно объявить дружественную функцию. Она будет иметь доступ к адресу. Так как это поле базового класса, то эта функция будет иметь доступ к этому полю всех производных классов, так как будет неявное преобразование производного класса к базовому..
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
виртуальные функции 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