Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/48: Рейтинг темы: голосов - 48, средняя оценка - 4.77
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

C++ ООП

27.06.2010, 00:26. Показов 8987. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Просьба дать какую-нибудь интересную программу, дабы теста на курс ООП. Чтобы не из книжки, а реально придуманная про программистом, или начинающим) Зоопарк как предложили парню недавно не предлагать, ибо будет неинтересно) Заранее спасибо. Мне нужна только задача, а не сама программа)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.06.2010, 00:26
Ответы с готовыми решениями:

ООП
Привет всем, народ дайте какую-нибудь интересную задачку на ООП, (однообразные задачи из учебников достали уже), чтоб она затрагивала как...

ООП
Всем привет! Если можно, не могли бы вы ответить на пару вопросов по ООП, а то что-то не могу понять. Вопросы: Зачем используются такие...

ооп
Нада книгу по ооп, такую что бы было все разжевано максимально. Так, что бы я за минимум времени и усилий разобрался.

36
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
27.06.2010, 00:38
Lavroff, необходимо разработать основные классы для обеспечения работы метрологической станции, к которой предъявляются следующие требования:
Система должна обеспечивать автоматический мониторинг следующих первичных погодных параметров:
  • скорость и направление ветра;
  • температура;
  • барометрическое давление;
  • влажность воздуха.
Система также должна вычислять некоторые производные параметры, в число которых входят:
  • коэффициент резкости погоды;
  • точка росы;
  • относительное изменение температуры;
  • относительное изменение барометрического давления.
В системе должна быть предусмотрена возможность определения текущего времени и даты, которые будут использоваться при генерации сообщении о максимальных и минимальных значениях первичных параметров за последние 24 часа.

Система должна обеспечивать постоянный вывод на дисплей текущих значений всех восьми первичных и производных параметров, а также текущее время и дату. Пользователь должен иметь возможность увидеть максимальные и минимальные значения любого из первичных параметров за 24 часа, сопровождаемые информацией о времени произведения соответствующего замера.

Система должна позволять пользователю проводить калибровку датчиков по известным опорным значениям, а также устанавливать текущие время и дату.
Пример из книги Буч. Г. Объектно-ориентированный анализ и проектирование.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
27.06.2010, 00:42
Lavroff, ну не нравится про зверюшек, напишите про транспортные средства. То бишь абстрактный класс Транспорт, а от него мотоцикл, автомобиль, паровоз, дризина...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 00:45  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Lavroff, ну не нравится про зверюшек, напишите про транспортные средства. То бишь абстрактный класс Транспорт, а от него мотоцикл, автомобиль, паровоз, дризина...
Вот это нравится больше чем первая задача в этой теме. От той чуток глаза на лоб полезли. А какие параметры включаются в классы и какие функции? Или самому придумать их?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
27.06.2010, 00:52
Цитата Сообщение от easybudda Посмотреть сообщение
Lavroff, ну не нравится про зверюшек, напишите про транспортные средства. То бишь абстрактный класс Транспорт, а от него мотоцикл, автомобиль, паровоз, дризина...
Не согласен с тобой. Задача неинтересна. Кроме наследования, в принципе, для решения этой задачи ничего не требуется. Ни полиморфизм, ни инкапсуляцию в широком смысле данная задача не раскрывает.
Цитата Сообщение от Lavroff Посмотреть сообщение
Вот это нравится больше чем первая задача в этой теме. От той чуток глаза на лоб полезли.
Первая задача более приближена к задачам возникающим в реальном мире.
Цитата Сообщение от Lavroff Посмотреть сообщение
Просьба дать какую-нибудь интересную программу, дабы теста на курс ООП.
Есть превосходная книга - Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Прочитаешь, поймешь и осознаешь - читай тест сдан.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 00:55  [ТС]
CyBOSSeR, Ну серьезные книги я еще почитаю. А пока только на второй курс перешел. И учусь C++ самостоятельно по одной книжке.

П.С. По той задаче. Каким методами + классами ее реализовать?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
27.06.2010, 01:07
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Первая задача более приближена к задачам возникающим в реальном мире.
Ну это как посмотреть

Lavroff, ну подумайте, что может быть общего у транспортных средств... Например переменные-члены максимальная скорость, количество пассажиров... У производного класса автомобиль - тип двигателя (дизель, бензиновый инжекторный, бензиновый карбюраторный), мощность двигателя, etc...
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 01:11  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Ну это как посмотреть

Lavroff, ну подумайте, что может быть общего у транспортных средств... Например переменные-члены максимальная скорость, количество пассажиров... У производного класса автомобиль - тип двигателя (дизель, бензиновый инжекторный, бензиновый карбюраторный), мощность двигателя, etc...
Ясно) Постараюсь. Спасибо!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
27.06.2010, 01:18
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Не согласен с тобой. Задача неинтересна. Кроме наследования, в принципе, для решения этой задачи ничего не требуется. Ни полиморфизм, ни инкапсуляцию в широком смысле данная задача не раскрывает.
Ну это опять же - как посмотреть... Если в базовом классе сделать виртуальный метод "расход топлива", в производных можно его переопределять исходя из типа топлива, типа и объёма двигателя... Опять же сам класс "топливо" можно сделать с переменной "название" и функцией, возвращающей энергию в джоулях при расходе определённого объёма. А от него потомков наделать (дрова, уголь, бензин...) с единицами измерения (кубометры, тонны, литры/галлоны)... Короче при желании можно в такие дебри забраться, что будет место и для инкапсуляции, и для полиморфизма...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 03:55  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <cstdlib>
#include <cstring>
class Transport
{
protected:
    std::string name;//Название средства
    double max_speed;//Максимальная скорость
    int num;//Колличество пассажиров
    int year;//Год выпуска
public:
    Transport(std::string name, double max_speed, int num, int year):name(name),max_speed(max_speed),num(num),year(year){}
    ~Transport(){}
    /*virtual void SetInfo(char _name[], double _max_speed, int _num, int _year)=0;*/
    virtual std::string GetName() const=0;
    virtual double GetSpeed() const=0;
    virtual int GetNum() const=0;
    virtual int GetYear() const=0;
};
class Auto:public Transport
{
protected:
    std::string fuel;//Топливо
    std::string mark;//Страна
    std::string country;//Производитель
public:
    Auto(std::string fuel,std::string mark, std::string country):Transport(name,max_speed,num,year),fuel(fuel),
        mark(mark),country(country){}
    ~Auto(){}
    //virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
    //  std::string _mark, std::string _country)=0;
    virtual std::string GetFuel() const=0;
    virtual std::string GetMark() const=0;
    virtual std::string GetCountry() const=0;
};
class Car:public Auto
{
protected:
    double run;//Пробег
    double volume;// Объем багажника
public:
    Car(double run, double volume):Auto(fuel,mark,country),run(run),volume(volume){}
    ~Car(){}
    virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
        std::string _mark, std::string _country, double _run, double _volume);
    virtual std::string GetName() const {return name;}
    virtual double GetSpeed() const {return max_speed;}
    virtual int GetNum() const {return num;}
    virtual int GetYear() const {return year;}
    virtual std::string GetFuel() const {return fuel;}
    virtual std::string GetMark() const {return mark;}
    virtual std::string GetCountry() const {return country;}
    double GetRun() const {return run;}
    double GetVolume() const {return volume;}
};
void Car::SetInfo(std::string _name, double _max_speed, int _num, int _year, 
std::string _fuel, std::string _mark, std::string _country, double _run, double _volume)
{
    name=_name; max_speed=_max_speed; num=_num; year=_year; fuel=_fuel;
    mark=_mark; country=_country; run=_run; volume=_volume;
}
Нечто вроде такого? Иерархия будет расширяться по возможности и времени)
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
27.06.2010, 04:05
Цитата Сообщение от Lavroff Посмотреть сообщение
~Transport(){}
Деструктор должен бить virtual.!
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 05:05  [ТС]
Цитата Сообщение от ISergey Посмотреть сообщение
Деструктор должен бить virtual.!
Ок. Будет virtual. В каждом абстрактном классе?

Добавлено через 35 минут
Кхм. Отмена. Буду налаживать работу хотя бы этих трех классов пока что.

Добавлено через 22 минуты
Работает. Приблизительно так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <cstdlib>
#include <string>
class Transport
{
protected:
    std::string name;//Название транс средства
    double max_speed;//Максимальная скорость
    int num;//Колличество пассажиров
    int year;//Год выпуска
public:
    Transport(std::string _name, double _max_speed, int _num, int _year):name(_name),max_speed(_max_speed),
        num(_num), year(_year){}
    virtual ~Transport(){}
    /*virtual void SetInfo(char _name[], double _max_speed, int _num, int _year)=0;*/
    virtual std::string GetName() const=0;
    virtual double GetSpeed() const=0;
    virtual int GetNum() const=0;
    virtual int GetYear() const=0;
};
class Auto:virtual public Transport
{
protected:
    std::string fuel;//Топливо
    std::string mark;//Страна
    std::string country;//Производитель
public:
    Auto(std::string _fuel, std::string _mark, std::string _country, std::string _name, double _max_speed,
        int _num, int _year):Transport(_name,_max_speed,_num,_year),fuel(_fuel),mark(_mark),country(_country){}
    virtual ~Auto(){}
    //virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
    //  std::string _mark, std::string _country)=0;
    virtual std::string GetFuel() const=0;
    virtual std::string GetMark() const=0;
    virtual std::string GetCountry() const=0;
};
class Car:virtual public Transport, public Auto
{
protected:
    double run;//Пробег
    double volume;// Объем багажника
public:
    Car (double _run, double _volume, std::string _name, double _max_speed, int _num, int _year,
        std::string _fuel, std::string _mark, std::string _country):Transport(_name,_max_speed,
        _num,_year),Auto(_fuel,_mark,_country,_name,_max_speed,_num,_year),run(_run),volume(_volume){}
    ~Car(){}
    virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
        std::string _mark, std::string _country, double _run, double _volume);
    virtual std::string GetName() const {return name;}
    virtual double GetSpeed() const {return max_speed;}
    virtual int GetNum() const {return num;}
    virtual int GetYear() const {return year;}
    virtual std::string GetFuel() const {return fuel;}
    virtual std::string GetMark() const {return mark;}
    virtual std::string GetCountry() const {return country;}
    double GetRun() const {return run;}
    double GetVolume() const {return volume;}
    friend std::ostream& operator<<(std::ostream&, Car&);
};
void Car::SetInfo(std::string _name, double _max_speed, int _num, int _year, 
std::string _fuel, std::string _mark, std::string _country, double _run, double _volume)
{
    name=_name; max_speed=_max_speed; num=_num; year=_year; fuel=_fuel;
    mark=_mark; country=_country; run=_run; volume=_volume;
}
std::ostream& operator<<(std::ostream&str, Car&p)
{
    str<<"Name: "<< p.name <<'\n'; str<<"Max_speed: "<< p.max_speed <<'\n';
    str<<"Num: "<< p.num <<'\n'; str<<"Year: "<< p.year <<'\n';
    str<<"Fuel: "<< p.fuel <<'\n'; str<<"Mark: "<< p.mark <<'\n';
    str<<"Country: "<< p.country <<'\n'; str<<"Run: "<< p.run <<'\n';
    str<<"Volume: "<< p.volume <<'\n'; return str;
}
int main()
{
    using namespace std;
    Car Ob(0,0,"",0,0,0,"","","");
    string name, fuel, mark, country;
    int year=0, num=0;
    double max_speed=0, run=0, volume=0;
    cout<<"Enter name: ";getline(cin,name);
    cout<<"Enter max_speed: ";cin>>max_speed;
    cout<<"Enter num: ";cin>>num;
    cout<<"Enter year: ";cin>>year;
    while(getchar()!='\n')continue;
    cout<<"Enter fuel: ";getline(cin,fuel);
    cout<<"Enter mark: ";getline(cin, mark);
    cout<<"Enter country: ";getline(cin,country);
    cout<<"Enter run: ";cin>>run;
    cout<<"Enter volume:";cin>>volume;
    Ob.SetInfo(name,max_speed,num,year,fuel,mark,country,run,volume);
    cout<<"\n";
    cout<<Ob<<'\n';
};
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
27.06.2010, 09:34
Цитата Сообщение от easybudda Посмотреть сообщение
Опять же сам класс "топливо" можно сделать с переменной "название" и функцией, возвращающей энергию в джоулях при расходе определённого объёма. А от него потомков наделать (дрова, уголь, бензин...) с единицами измерения (кубометры, тонны, литры/галлоны)... Короче при желании можно в такие дебри забраться, что будет место и для инкапсуляции, и для полиморфизма...
Проблема в том, что в таком случае мы будем иметь дело с большим количеством классов, без чего в принципе можно обойтись (что и нужно сделать). Не следует плодить сущностей без необходимости.
Задача не является задачей на ООП. На механизм наследования - да, но не более. В основном потому, что нет взаимодействия между объектами различных классов.
Цитата Сообщение от Lavroff Посмотреть сообщение
Ок. Будет virtual. В каждом абстрактном классе?
Если подразумевается наследование, то деструктор должен быть объявлен виртуальным в базовом классе. Это необходимо для правильного вызова деструктора объекта производного класса при удалении его через указатель на базовый класс.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
class Base {
public:
  ~Base() {
    std::cout << "Base::~Base" << std::endl;
  }
};
 
class Derived : public Base {
public:
  ~Derived() {
    std::cout << "Derived::~Derived" << std::endl;
  }
};
 
int main() {
  Base* obj = new Derived;
  delete obj;
}
Вывод программы:
Base::~Base
В данном случае деструктор базового класса не является виртуальным, поэтому подлежит статическому связыванию и его вызов будет на этапе компиляции связан с деструктором базового класса (по типу указателя).

Если же мы объявим деструктор виртуальным, вывод будет следующим:
Base::~Base
Derived::~Derived
Деструктор в базовом классе объявлен виртуальным и поэтому подлежит динамическому связыванию.
Виртуальный деструктор ничем от виртуальной функции не отличается, кроме того, что вызывается автоматически при уничтожении объекта.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
27.06.2010, 13:29
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Задача не является задачей на ООП. На механизм наследования - да, но не более.
Ну задачи-то, как таковой, и вовсе небыло... Если делать просто каталог тс с выводом каких-то их параметров, то и классы никакие не нужны, можно нехитрой структурой обойтись (про то, что в С++ структура - тот же класс, я в курсе ). Если же делать игрушку, в которой предполагается управлять машинами/поездами/самолётами, то вот тут как-раз очень много моментов общих для всех классов, но по-разному в них реализованных...
0
27.06.2010, 14:01

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
Если же делать игрушку, в которой предполагается управлять машинами/поездами/самолётами, то вот тут как-раз очень много моментов общих для всех классов, но по-разному в них реализованных...
Ну, ладно, убедил:) Умываю руки:)

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 20:05  [ТС]
Вот что вырисовывается на данный момент:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Файл Classes.h
#include <iostream>
class Transport
{
protected:
        std::string name;//Название транс средства
        double max_speed;//Максимальная скорость
        int num;//Колличество пассажиров
        int year;//Год выпуска
public:
        Transport(std::string _name, double _max_speed, int _num, int _year):name(_name),max_speed(_max_speed),
                num(_num), year(_year){}
        virtual ~Transport(){}
        virtual std::string GetName() const=0;
        virtual double GetSpeed() const=0;
        virtual int GetNum() const=0;
        virtual int GetYear() const=0;
};
class Auto:virtual public Transport
{
protected:
        std::string fuel;//Топливо
        std::string mark;//Страна
        std::string country;//Производитель
public:
        Auto(std::string _fuel, std::string _mark, std::string _country, std::string _name, double _max_speed,
                int _num, int _year):Transport(_name,_max_speed,_num,_year),fuel(_fuel),mark(_mark),country(_country){}
        virtual ~Auto(){}
        virtual std::string GetFuel() const=0;
        virtual std::string GetMark() const=0;
        virtual std::string GetCountry() const=0;
};
class Car:virtual public Transport, public Auto
{
protected:
        double run;//Пробег
        double volume;// Объем багажника
public:
        Car (double _run, double _volume, std::string _name, double _max_speed, int _num, int _year,
                std::string _fuel, std::string _mark, std::string _country):Transport(_name,_max_speed,
                _num,_year),Auto(_fuel,_mark,_country,_name,_max_speed,_num,_year),run(_run),volume(_volume){}
        ~Car(){}
        virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
                std::string _mark, std::string _country, double _run, double _volume);
        virtual std::string GetName() const {return name;}
        virtual double GetSpeed() const {return max_speed;}
        virtual int GetNum() const {return num;}
        virtual int GetYear() const {return year;}
        virtual std::string GetFuel() const {return fuel;}
        virtual std::string GetMark() const {return mark;}
        virtual std::string GetCountry() const {return country;}
        double GetRun() const {return run;}
        double GetVolume() const {return volume;}
        friend std::ostream& operator<<(std::ostream&, Car&);
        friend std::istream& operator>>(std::istream&, Car&);
};
class Truck:virtual public Transport, virtual public Auto
{
private:
    double cargo;//Грузоподъемность
    std::string goods;//Что перевозит
    std::string Body_type;//Тип кузова
public:
    Truck(double _cargo, std::string _goods, std::string _Body_type, std::string _name, double _max_speed,
        int _num, int _year, std::string _fuel, std::string _mark, std::string _country):Transport
        (_name, _max_speed, _num, _year),Auto(_fuel,_mark,_country,_name,_max_speed,_num,_year),
        cargo(_cargo), goods(_goods), Body_type(_Body_type){}
    ~Truck(){}
    virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
        std::string _mark, std::string _country, double _cargo, std::string _goods, std::string _BT);
    virtual std::string GetName() const {return name;}
    virtual double GetSpeed() const {return max_speed;}
    virtual int GetNum() const {return num;}
    virtual int GetYear() const {return year;}
    virtual std::string GetFuel() const {return fuel;}
    virtual std::string GetMark() const {return mark;}
    virtual std::string GetCountry() const {return country;}
    double GetCargo() const {return cargo;}
    std::string GetGoods() const {return goods;}
    std::string GetBT() const {return Body_type;}
    friend std::ostream& operator<<(std::ostream&, Truck&);
    friend std::istream& operator>>(std::istream&, Truck&);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Файл Functions.h
#include <iostream>
#include <cstdlib>
#include <string>
#include "classes.h"
void Car::SetInfo(std::string _name, double _max_speed, int _num, int _year, 
std::string _fuel, std::string _mark, std::string _country, double _run, double _volume)
{
        name="Car"; max_speed=_max_speed; num=4; year=_year; fuel="Benzin";
        mark=_mark; country=_country; run=_run; volume=_volume;
}
std::ostream& operator<<(std::ostream&str, Car&p)
{
        str<<"Name: "<< p.name <<'\n'; str<<"Max_speed: "<< p.max_speed <<'\n';
        str<<"Num: "<< p.num <<'\n'; str<<"Year: "<< p.year <<'\n';
        str<<"Fuel: "<< p.fuel <<'\n'; str<<"Mark: "<< p.mark <<'\n';
        str<<"Country: "<< p.country <<'\n'; str<<"Run: "<< p.run <<'\n';
        str<<"Volume: "<< p.volume <<'\n'; return str;
}
std::istream& operator>>(std::istream&str, Car&p)
{
    std::cout<<"Enter max speed: \n";str>>p.max_speed; std::cout<<"Enter year: \n";str>>p.year;
    std::cout<<"Enter mark: \n";str>>p.mark; std::cout<<"Enter country: \n";str>>p.country; 
    std::cout<<"Enter run: \n";str>>p.run; std::cout<<"Enter volume: \n";str>>p.volume;
    p.SetInfo(p.name,p.max_speed,p.num,p.year,p.fuel,p.mark,p.country,p.run,p.volume);
    return str;
}
 
void Truck::SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel, 
                    std::string _mark, std::string _country, double _cargo, std::string _goods, std::string _Body_type)
{
    name="Truck"; max_speed=_max_speed; num=2; year=_year; fuel="Dizel"; mark=_mark;
    country=_country; cargo=_cargo; goods=_goods; Body_type=_Body_type;
}
std::ostream& operator<<(std::ostream&str, Truck&p)
{
    str<<"Name: "<< p.name <<'\n'; str<<"Max_speed: "<< p.max_speed <<'\n';
    str<<"Num: "<< p.num <<'\n'; str<<"Year: "<< p.year <<'\n';
    str<<"Fuel: "<< p.fuel <<'\n'; str<<"Mark: "<< p.mark <<'\n';
    str<<"Country: "<< p.country <<'\n'; str<<"Cargo: "<< p.cargo <<'\n';
    str<<"Goods: "<< p.goods <<'\n'; str<<"Body_tipe: "<< p.Body_type <<'\n'; return str;
}
std::istream& operator>>(std::istream&str, Truck&p)
{
    std::cout<<"Enter max speed: \n";str>>p.max_speed;std::cout<<"Enter year: \n";str>>p.year;
    std::cout<<"Enter mark: \n";str>>p.mark; std::cout<<"Enter country: \n";str>>p.country; 
    std::cout<<"Enter cargo: \n";str>>p.cargo;std::cout<<"Enter goods: \n";str>>p.goods; 
    std::cout<<"Enter body tipe: \n";str>>p.Body_type;
    p.SetInfo(p.name,p.max_speed,p.num,p.year,p.fuel,p.mark,p.country,p.cargo, p.goods, p.Body_type);
    return str;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Файл Transport.cpp
#include <iostream>
#include <cstdlib>
#include <string>
#include "Functions.h"
int main()
{
    Car Ob(0,0,"",0,0,0,"","","");
    Truck Ob2(0,"","","",0,0,0,"","","");
    std::cin>>Ob;
    std::cout<<'\n';
    std::cin>>Ob2;
    std::cout<<Ob<<'\n';
    std::cout<<Ob<<'\n';
    std::cout<<"\n";
    std::cout<<Ob2<<'\n';
};
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
27.06.2010, 20:49
Lavroff, все методы класса Transport могут и должны быть реализованы в этом же классе. И не надо делать их виртуальными - их реализация во всех подклассах одинакова.
Это также относится к классу Auto.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 21:34  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Lavroff, все методы класса Transport могут и должны быть реализованы в этом же классе. И не надо делать их виртуальными - их реализация во всех подклассах одинакова.
Это также относится к классу Auto.
Хорошо. Так и будет сделано

Добавлено через 35 минут
Небольшие изменения.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//Файл Classes.h
#include <iostream>
const std::string CarName("Car");
const std::string TruckName("Truck");
const std::string CarFuel("Benzin");
const std::string TruckFuel("Dizel");
const int CarNum=4;
const int TruckNum=2;
class Transport
{
protected:
        std::string name;//Название транс средства
        double max_speed;//Максимальная скорость
        int num;//Колличество пассажиров
        int year;//Год выпуска
public:
        Transport(std::string _name, double _max_speed, int _num, int _year):name(_name),max_speed(_max_speed),
                num(_num), year(_year){}
        virtual ~Transport(){}
        virtual std::string GetName() const=0;
        double GetSpeed() const{return max_speed;}
        virtual int GetNum() const=0;
        int GetYear() const{return year;}
};
class Auto:virtual public Transport
{
protected:
        std::string fuel;//Топливо
        std::string mark;//Страна
        std::string country;//Производитель
public:
        Auto(std::string _fuel, std::string _mark, std::string _country, std::string _name, double _max_speed,
                int _num, int _year):Transport(_name,_max_speed,_num,_year),fuel(_fuel),mark(_mark),country(_country){}
        virtual ~Auto(){}
        virtual std::string GetFuel() const=0;
        std::string GetMark() const{return mark;}
        std::string GetCountry() const{return country;};
};
class Car:virtual public Transport, public Auto
{
protected:
        double run;//Пробег
        double volume;// Объем багажника
public:
        Car (double _run, double _volume, std::string _name, double _max_speed, int _num, int _year,
                std::string _fuel, std::string _mark, std::string _country):Transport(_name,_max_speed,
                _num,_year),Auto(_fuel,_mark,_country,_name,_max_speed,_num,_year),run(_run),volume(_volume){}
        ~Car(){}
        virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
                std::string _mark, std::string _country, double _run, double _volume);
        virtual std::string GetName() const {return CarName;}
        virtual int GetNum() const {return CarNum;}
        virtual std::string GetFuel() const {return CarFuel;}
        double GetRun() const {return run;}
        double GetVolume() const {return volume;}
        friend std::ostream& operator<<(std::ostream&, Car&);
        friend std::istream& operator>>(std::istream&, Car&);
};
class Truck:virtual public Transport, virtual public Auto
{
private:
    double cargo;//Грузоподъемность
    std::string goods;//Что перевозит
    std::string Body_type;//Тип кузова
public:
    Truck(double _cargo, std::string _goods, std::string _Body_type, std::string _name, double _max_speed,
        int _num, int _year, std::string _fuel, std::string _mark, std::string _country):Transport
        (_name, _max_speed, _num, _year),Auto(_fuel,_mark,_country,_name,_max_speed,_num,_year),
        cargo(_cargo), goods(_goods), Body_type(_Body_type){}
    ~Truck(){}
    virtual void SetInfo(std::string _name, double _max_speed, int _num, int _year, std::string _fuel,
        std::string _mark, std::string _country, double _cargo, std::string _goods, std::string _BT);
    virtual std::string GetName() const {return TruckName;}
    virtual int GetNum() const{return TruckNum;}
    virtual std::string GetFuel() const {return TruckFuel;}
    double GetCargo() const {return cargo;}
    std::string GetGoods() const {return goods;}
    std::string GetBT() const {return Body_type;}
    friend std::ostream& operator<<(std::ostream&, Truck&);
    friend std::istream& operator>>(std::istream&, Truck&);
};
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
27.06.2010, 21:57
Эй, а зачем у тебя car наследует и от transport и от auto? Это же чушь. Сделай просто от Auto.

Добавлено через 7 минут
Смотрю у тебя полиморфизма нет... Можешь заюзать например так: сделай еще парочку классов, какой нить мерс да запорожец, пусть они оба умеют делать какоенить действие (виртуальный метод класса car), но по-разному (две различные реализации в соответствующих классах). Пусть бибикают хотя бы, на что фантазии хватит. Потом например сделай массив указателей типа car, понасоздавай динамически рандомных машин, запихай в него. Позапускай методы. Понаслаждайся видом того как одинаковые внешне штуки делают похожие действия по-разному.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.06.2010, 22:10  [ТС]
Хохол, Точно. Что-то увлекся совсем наследованием. Попробую ща сделать с полиморфизмом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2010, 22:10
Помогаю со студенческими работами здесь

ООП на С++
Помогите пожалуйста!! Не понимаю как это сделать(( Создать программу с классом Student порождающий обьекты - данные об студентах...

ООП
1) Для класса символьной строки определить отношение лексикографического порядка, перегрузив с помощью дружественной функции операцию...

по ООП .
Помогите пожалуйтса с решением задач ! на С++ 1.Дана неубывающая последовательность действительных чисел. Вставить в неё...

ООП
проблема в классе квадрат- ниже код, я не прошу его переписывать, попробуйте кто то у себя запустите и будьте добры скажите почему там...

ООП
Создать класс Vegetable, содержащий следующие элементы: - поле «вес» float Mass; - поле «зрелость» int Ripeness; - метод получения...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru