Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 24.05.2016, 12:30   #1 (permalink)
Pantera19
Новичок
 
Регистрация: 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>Создание кода...
Pantera19 вне форума   Ответить с цитированием

Старый 24.05.2016, 12:30
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Содержание вашей темы очень схоже с другими темами, можете потратить минутку и ознакомиться

Вражеский водолаз "Роял Нейви" и 7 его друзей. Проект"Русский стимпанк". Серия"Враги"
Пропали кнопки внизу окон, "Сохранить", "Отмена","Применить" и тп.
Ссылки утилитна тему-Забанили на сайтах "ВКОНТАКТЕ","Mail.ru","Google" и т.д
Помогите ".exe","vyre32.exe","exsys.exe"...!!!(логи avz и hijackthis внутри )

Старый 24.05.2016, 13:14   #2 (permalink)
grelly
падаван
 
Аватар для grelly
 
Регистрация: 23.01.2013
Сообщений: 739
Сказал(а) спасибо: 307
Поблагодарили 27 раз(а) в 3 сообщениях
Репутация: 10792
По умолчанию

все очень плохо) попозже попробую расписать ошибки.
grelly вне форума   Ответить с цитированием
Старый 24.05.2016, 14:51   #3 (permalink)
grelly
падаван
 
Аватар для grelly
 
Регистрация: 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;
}
footballer.h
Код:
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);
footballer.cpp
Код:
#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 области и в ней присваивать новое значение
}
Мои комментарии после "///". В этих же строках исправления. Сравнивай со своим кодом.
Этот код компилируется и выполняется, но причесывать там еще очень и очень много)
grelly вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:32.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.