|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
24.05.2016, 12:30 | #1 (permalink) |
Новичок
Регистрация: 24.05.2016
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Для класса "Футболист" создать производный класс "Нападающий" и "Защитник" ООП С++
Определить внешний метод (не являющийся методом данного класса), который запрашивает у пользователя и устанавливает новое значение для свойства: мастерство объекта класса ФУТБОЛИСТ. Параметром данного метода должна быть ссылка на объект, свойство которого следует изменить. Код:
#include <iostream> #include "footballer.h" using namespace std; int main() { attacking A(); A.footballer::print(); A.print(); A.transform(); quarterback B(); B.print(); system("pause"); return 0; } Код:
class footballer { private: char * surname; char * team; float rost; float weight; //вес public: footballer( char * ="Name", char * ="team", float=0.0, float =0.0); footballer(const footballer &); footballer & operator=(const footballer & ); //опер присваивания ~footballer(); void print()const; void setrost(); void setweight(); }; class attacking: public footballer { private: unsigned short mastery; int gol; public: attacking( unsigned short=12, int=2, char * ="Name 2 ", char * ="team ",float=175.1,float=69.5); attacking(const attacking & A); friend void transform( const attacking &); attacking & operator=(const attacking & ); ~attacking(); void print()const; void setgol(); }; class quarterback: footballer { private: int matches; int victory; public: quarterback( int=1, int=0, char * ="Name 3" , char * ="team ", float=170.8 , float=75.0); quarterback( const quarterback & A); quarterback & operator=(const quarterback & ); ~quarterback(); void setmatches()const; void setvictory()const; }; Код:
#include <iostream> #include "footballer.h" using namespace std; footballer::footballer(char * a, char * b, float c,float d): surname(a),team(b) { surname=new char[strlen(a)+1]; strcpy(a,surname); team=new char[strlen(b)+1]; strcpy(b,team); } footballer::footballer(const footballer &A) { surname = new char[strlen(A.surname)+1]; strcpy(surname,A.surname); team= new char[strlen(A.team)+1]; strcpy(team,A.team); weight=A.weight; rost=A.rost; } footballer::~footballer() { delete[]surname; delete[]team; } footballer & footballer ::operator=(const footballer & A) { if (this!=&A) { surname=new char[strlen(A.surname)+1]; team=new char[strlen(A.team)+1]; weight=A.weight; rost=A.rost; } return *this; } void footballer::setrost() { cout<<"\n Enter rost"; cin>>rost; } void footballer::setweight() { cout<<"\n Enter weight"; cin>>weight; } void footballer::print()const { cout<<"footballer:"<<surname<<"rost"<<rost<<"weight"<<weight<<"team"<<team; } /////////////////////////////////// attacking::attacking( unsigned short f, int k,char a, char b,float * c,float * d):footballer(a,b,c,d) { mastery=f; gol=k; } attacking::attacking(const attacking & A):footballer(A) { mastery=A.mastery; gol=A.gol; } attacking::~attacking(){} attacking & attacking:: operator=(const attacking & ) { if (this!=&A) { mastery=A.mastery; gol=A.gol; } return *this; } void attacking::setgol() { gol++; } void attacking::print()const { cout<<"footballer:"<<surname<<"mastery"<<mastery<<"gol"<<gol; } //////////////////////////////////////// quarterback::quarterback (int m, int n, char a, char b, float * c,float * d):footballer(a,b,c,d) { matches=m; victory=n; } quarterback::quarterback( const quarterback & A) { mathes=A.matches; victory=A.victory; } quarterback::~quarterback(){} quarterback & quarterback:: operator=(const quarterback & ) { if (this!=&A) { mathes=A.matches; victory=A.victory; } return *this; } void quarterback::mathes() { mathes++; } void quarterback::victory() { victory++; } void transform( const attacking &) { cout<<endl<<"enter mastersto quarterback"; cin>>attacking.mastery; } 1>g:\ооп\oop3\oop3\footballer.cpp(65) : error C2511: attacking::attacking(unsigned short,int,char,char,float *,float *): перегруженная функция-член не найдена в 'attacking' 1> g:\ооп\oop3\oop3\footballer.h(18): см. объявление 'attacking' 1>g:\ооп\oop3\oop3\footballer.cpp(140) : fatal error C1004: непредвиденное обнаружение конца файла 1>main.cpp 1>g:\ооп\oop3\oop3\main.cpp(7) : error C2228: выражение слева от ".print" должно представлять класс, структуру или объединение 1>g:\ооп\oop3\oop3\main.cpp(7) : error C2662: footballer:rint: невозможно преобразовать указатель 'this' из 'attacking (__cdecl *)(void)' в 'const footballer &' 1> Причина: невозможно преобразовать 'attacking (__cdecl *)(void)' в 'const footballer' 1> Для преобразования требуется второй оператор пользовательского преобразования или конструктор 1>g:\ооп\oop3\oop3\main.cpp(8) : error C2228: выражение слева от ".print" должно представлять класс, структуру или объединение 1>g:\ооп\oop3\oop3\main.cpp(9) : error C2228: выражение слева от ".transform" должно представлять класс, структуру или объединение 1>g:\ооп\oop3\oop3\main.cpp(11) : error C2228: выражение слева от ".print" должно представлять класс, структуру или объединение 1>Создание кода... |
24.05.2016, 12:30 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Содержание вашей темы очень схоже с другими темами, можете потратить минутку и ознакомиться Вражеский водолаз "Роял Нейви" и 7 его друзей. Проект"Русский стимпанк". Серия"Враги" Пропали кнопки внизу окон, "Сохранить", "Отмена","Применить" и тп. Ссылки утилитна тему-Забанили на сайтах "ВКОНТАКТЕ","Mail.ru","Google" и т.д Помогите ".exe","vyre32.exe","exsys.exe"...!!!(логи avz и hijackthis внутри ) |
24.05.2016, 14:51 | #3 (permalink) |
падаван
Регистрация: 23.01.2013
Сообщений: 739
Сказал(а) спасибо: 307
Поблагодарили 27 раз(а) в 3 сообщениях
Репутация: 10792
|
основной файл
Код:
#include <iostream> #include "footballer.h" using namespace std; int main() { attacking A; ///A.footballer::print(); /// напрямую не сработает. надо приводить А к классу footballer, и только тогда вызывать функцию A.print(); transform(A); /// transform не является членом класса attacking quarterback B; B.print(); std::cout<<std::endl; /// переход на новую строку system("pause"); return 0; } Код:
class footballer { protected: /// Использовать protected вместо private, если нужен доступ из дочерних классов. Согласно идеологии ООП нужно доступ осуществлять через Get-функции char * surname; char * team; float rost; float weight; //вес public: footballer( char * nameDef ="Name", char *teamDef ="team", float rostDef=0.0, float weightDef=0.0); /// добавить имена для переменных, значения по-умолчанию свести в конструктор, если не заданы иные footballer(const footballer &A); footballer & operator=(const footballer & A); //опер присваивания ~footballer(); void print()const; /// зачем const void setrost(); void setweight(); }; class attacking: public footballer { private: unsigned short mastery; int gol; public: attacking( unsigned short masteryDef=12, int golDef=2, char *nameDef ="Name 2 ", char *teamDef ="team ",float rostDef=175.1,float weightDef=69.5); attacking(const attacking & A); friend void transform( const attacking & A); attacking & operator=(const attacking & A); ~attacking(); void print()const; void setgol(); }; class quarterback: public footballer {/// надо определить тип наследования(в данном случае public) private: int matches; int victory; public: quarterback( int matchesDef=1, int victoryDef=0, char *nameDef ="Name 3" , char *teamDef ="team ", float rostDef=170.8 , float weightDef=75.0); quarterback( const quarterback & A); quarterback & operator=(const quarterback & A); ~quarterback(); void setmatches(); /// зачем const void setvictory(); }; void transform( const attacking &A); Код:
#include <iostream> #include "footballer.h" using namespace std; footballer::footballer(char *nameDef, char *teamDef, float rostDef, float weightDef) ///:surname(a),team(b) /// это что вообще такое?) { surname=new char[strlen(nameDef)+1]; strcpy(surname, nameDef); /// первый параметр показывает куда копировать, второй - откуда team=new char[strlen(teamDef)+1]; strcpy(team, teamDef); weight=weightDef;/// в конструкторе надо не забывать инициализировать переменные rost=rostDef; } footballer::footballer(const footballer &A) { surname = new char[strlen(A.surname)+1]; strcpy(surname,A.surname); team= new char[strlen(A.team)+1]; strcpy(team,A.team); weight=A.weight; rost=A.rost; } footballer::~footballer() { delete[]surname; delete[]team; } footballer & footballer ::operator=(const footballer & A) { if (this!=&A) { /// удалить surname и team, если они были созданы до этого surname=new char[strlen(A.surname)+1]; /// это действие только создает массив, team=new char[strlen(A.team)+1]; /// но не копирует в него значение(сделать как в конструкторе копий) weight=A.weight; rost=A.rost; } return *this; } void footballer::setrost() { cout<<"\n Enter rost"; cin>>rost; } void footballer::setweight() { cout<<"\n Enter weight"; cin>>weight; } void footballer::print()const { cout<<"footballer:"<<surname<<"rost"<<rost<<"weight"<<weight<<"team"<<team; } /////////////////////////////////// attacking::attacking( unsigned short masteryDef, int golDef, char *nameDef, char *teamDef,float rostDef,float weightDef):footballer(nameDef, teamDef, rostDef, weightDef) { mastery=masteryDef; gol=golDef; } attacking::attacking(const attacking & A):footballer(A) { mastery=A.mastery; gol=A.gol; } attacking::~attacking(){} attacking & attacking:: operator=(const attacking & A) { if (this!=&A) { mastery=A.mastery; gol=A.gol; } return *this; } void attacking::setgol() { gol++; } void attacking::print()const { cout<<"footballer:"<<surname<<"mastery"<<mastery<<"gol"<<gol; } //////////////////////////////////////// quarterback::quarterback (int matchesDef, int victoryDef, char *nameDef, char *teamDef, float rostDef, float weightDef):footballer(nameDef, teamDef, rostDef, weightDef) { matches=matchesDef; victory=victoryDef; } quarterback::quarterback( const quarterback & A):footballer(A) { matches=A.matches; /// копипаст - зло)) victory=A.victory; } quarterback::~quarterback(){} quarterback & quarterback:: operator=(const quarterback & A) { if (this!=&A) { matches=A.matches;/// копипаст - зло)) victory=A.victory; } return *this; } void quarterback::setmatches() /// названия функций должны совпадать с хидером { matches++;/// копипаст - зло)) } void quarterback::setvictory() { victory++; } void transform( const attacking &A) { cout<<endl<<"enter mastersto quarterback"; unsigned short newMastery; cin>>newMastery; /// mastery приватный член класса и доступ к нему невозможен. /// A.mastery = newMastery; /// надо создать функцию void SetMastery(unsigned short newMastery) в public области и в ней присваивать новое значение } Этот код компилируется и выполняется, но причесывать там еще очень и очень много) |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|