Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
uninstall
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 16
#1

Базовый класс "Летательный аппарат" и производные классы Ракета и Самолет

10.02.2015, 01:10. Просмотров 1184. Ответов 14
Метки нет (Все метки)

Определить абстрактный базовый класс "Летательный аппарат" содержащий данные, описывающие название, стартовую массу аппарата. В этом классе должна быть чистая виртуальная функция print для вывода данных. Затем определите производный класс «Ракета», в котором будут новые элементы данных – количество ступеней, масса полезной нагрузки. Определите класс «Вертолёт», производный от «Летательного аппарата», в котором будут новые элементы данных – количество человек в экипаже. Вывод данных должен осуществляться с помощью виртуальной функции print. Напишите программу, тестирующую эти классы. Создайте вектор из объектов класса «Вертолёт», отсортируйте его содержимое по количеству человек в экипаже и выведите его на консоль.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2015, 01:10
Ответы с готовыми решениями:

Базовый класс "Изделие" и производные классы "Мышь", "Клавиатура", "Монитор"
/*Создать класс изделие, с полями себестоимость, цена, время выполнения,...

Базовый класс "Источник напряжения", производные классы "Цепь" и "Аккумулятор"
Дали задачу по программированию: составить класс "Источник напряжения", для...

Базовый класс "многоугольник" и производные классы "треугольник" и "прямоугольник"
Не могу понять как реализовать данное задание. Создать 1 базовый класс и...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран...

Класс: Создать базовый класс «работник фирмы» и производные классы «стажер», «руководящий сотрудник», «директор»...
Всем привет, помогите пожалуйста, я уже всю голову сломал, не знаю как решить...

14
pdmitriya
8 / 8 / 4
Регистрация: 29.01.2015
Сообщений: 57
10.02.2015, 01:18 #2
У меня 5 задание примерно такое же cut
 Комментарий модератора 
Запрещено публиковать ответы на вопросы или решения задач с форума на другие сайты и давать на них ссылки в качестве ответа.
0
uninstall
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 16
10.02.2015, 01:30  [ТС] #3
Не вижу ничего общего.
0
pdmitriya
8 / 8 / 4
Регистрация: 29.01.2015
Сообщений: 57
10.02.2015, 01:38 #4
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
#include <iostream>
using namespace std;
 
class lapparat
{
    protected:
        int mass;
        char name[80];
    public:
        lapparat();
        virtual ~lapparat();
        virtual void Print(char, int)const;
};
class raketa: public lapparat{
        int netto, amount;
        public:
        void Print(char, int)const;
};
class chopper: public lapparat{
        int units;
 
};
 
int main() {
       int mass;
       char name[80];
       cin >> mass >> name;
       lapparat a(mass,name);
       return 0;
}
0
uninstall
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 16
10.02.2015, 03:14  [ТС] #5
Ошибка "no matching function for call to 'lapparat::lapparat(int&, char [80])'" в 28-й строке
Цитата Сообщение от pdmitriya Посмотреть сообщение
lapparat a(mass,name);
0
pdmitriya
8 / 8 / 4
Регистрация: 29.01.2015
Сообщений: 57
10.02.2015, 19:18 #6
завтра выложу решение
0
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
10.02.2015, 20:15 #7
Лучший ответ Сообщение было отмечено uninstall как решение

Решение

как-то так
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
#pragma once
 
#include <string>
#include <iostream>
 
//using namespace std;
 
class Aircraft {
    
    protected:
    std::string model;
    int weight;
    
    public:
    Aircraft() : model(""), weight(0) {};
    Aircraft(std::string _model, int _weight) : model(_model), weight(_weight) {};
    
    virtual void print() = 0;
    
};
 
class Rocket: public Aircraft {
    
    unsigned char stages;
    int useful_payload;
    
    public:
    Rocket() : Aircraft("", 0), stages(0), useful_payload(0) {};
    Rocket(std::string _name, int _weight, unsigned char _stages, int _useful_payload) :
        Aircraft(_name, _weight),
        stages(_stages),
        useful_payload(_useful_payload) {};
    
    void print() {
    
        std::cout << "Rocket\nModel: " << model
        << "\nWeight: " << weight
        << "\nStages: " << (unsigned short)stages
        << "\nUseful payload:" << useful_payload
        << "\n";
    
    }
    
};
 
class Helicopter: public Aircraft {
    
    unsigned short crew;
    
    public:
    Helicopter() : Aircraft("", 0), crew(0) {};
    Helicopter(std::string _name, int _weight, unsigned short _crew) :
        Aircraft(_name, _weight),
        crew(_crew) {};
        
    void print() {
            
        std::cout << "Helicopter\nModel: " << model
        << "\nWeight: " << weight
        << "\nCrew: " << crew
        << "\n";
        
    }
    
    bool operator<(Helicopter& o) {
        
        return crew < o.crew;
    
    }
    
};
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
#include "aircraft.h"
#include <vector>
#include <algorithm>
 
int main() {
    
    Rocket proton("Proton", 458900 + 168300 + 46562, 3 , 3700);
    proton.print();
    
    std::cout << "----\n";
    
    std::vector<Helicopter> heli_array;
    heli_array.push_back(Helicopter("Bell UH-1 Iroquois", 2363, 4));
    heli_array.push_back(Helicopter("B-8", 5726, 3));
    heli_array.push_back(Helicopter("B-7", 730, 1));
    heli_array.push_back(Helicopter("Ka-32", 6800, 3));
    
    std::sort(heli_array.begin(), heli_array.end());
    
    for(auto i : heli_array) {
    
        i.print();
        std::cout << "-\n";
        
    }
    
    return 0;
    
}
1
uninstall
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 16
13.02.2015, 01:18  [ТС] #8
Не понимаю как запустить, эти коды надо сделать процедурными?
0
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
13.02.2015, 01:51 #9
uninstall, что такое "процедурные коды"?
0
uninstall
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 16
13.02.2015, 03:31  [ТС] #10
Всмысле сделать их процедурами с first() и second() за место main(). Но в первом коде main() как таковой вообще отсутствует, поэтому и так тоже запустить не получится. Если Вам не составит большого труда откомментировать каждую строку кода(объяснить как сеё работает), просьба написать на почту d.ii@mail.ru, есть предложение.
0
pdmitriya
8 / 8 / 4
Регистрация: 29.01.2015
Сообщений: 57
13.02.2015, 03:46 #11
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
#include <iostream>
#include <algorithm> 
#include <vector>
 
using namespace std; //пространство имен std
 
class lapparat
{
protected:
    int mass;
    string name;
public:
    lapparat(int m=0,string n="") //конструктор
    :mass(m),name(n)//инициализация списком
    {}
    virtual void Print()const = 0;//прототип виртуальной функции
    virtual ~lapparat(){}//деструктор 
};
 
class raketa: public lapparat{
    int netto, amount;
public:
    void GetData(int m=0, string _model="", int n=0, int a=0)
    {
        mass=m;
        netto=n;
        amount=a;
        name=_model;
    }
    void Print()const
    {
        cout << mass << ":" << name << ":" << netto << ":" << amount << endl;
    }
};
 
class chopper: public lapparat{
    int units;
public:
    chopper(int m, string n, int u=0)
    :lapparat(m,n),units(u){}
    void Print()const
    {
        cout << mass << ":" << name << ":"  << units << endl;
    }
   bool operator<(chopper& x) {//перегрузка оператора в классе, т.к без предиката сортировки
        
        return units < x.units;
    
    }
};
 
int main() {
    raketa a;
    lapparat *p=&a;//для доступа через указатель
    a.GetData(48,"Proton",20,3);
    p->Print();//тестим класс raketa
    vector<chopper> chop_array;// Создание вектора
    chop_array.push_back(chopper(10,"K-47",12));// Добавление элемента в конец вектора
    chop_array.push_back(chopper(4,"K-45",5));// Добавление элемента в конец вектора
    chop_array.push_back(chopper(9,"K-52",16));// Добавление элемента в конец вектора
    sort(chop_array.begin(), chop_array.end()); //sort(vec.begin(), vec.end(), <предикат сортировки>);
    for(unsigned i=0;i<chop_array.size();i++)//size определяет размер вектора
        chop_array[i].Print();
    return 0;
}
 
//P.S я еще не дочитал книгу по с++ и с векторами не сталкивался :-)
1
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,426
Записей в блоге: 24
Завершенные тесты: 1
13.02.2015, 07:38 #12
Цитата Сообщение от uninstall Посмотреть сообщение
Не понимаю как запустить
Почитайте про раздельную компиляцию.

Добавлено через 4 минуты
Цитата Сообщение от pdmitriya Посмотреть сообщение
//P.S я еще не дочитал книгу по с++ и с векторами не сталкивался :-)
Кратко и доступно про вектора: раз, два, три, четыре, пять.

Добавлено через 2 минуты
Справочная информация про вектора: раз и два.
1
uninstall
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 16
14.02.2015, 00:37  [ТС] #13
5 ошибок:
"no match for 'operator<' 'in' _a<_b' " строка 89;
"no match for 'operator<' 'in' _b<_c' "строка 90;
"no match for 'operator<' 'in' _a<_c' "строка 92;
"no match for 'operator<' 'in' _a<_c' "строка 96;
"no match for 'operator<' 'in' _b<_c' " строка 98;
0
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,426
Записей в блоге: 24
Завершенные тесты: 1
15.02.2015, 09:03 #14
Цитата Сообщение от uninstall Посмотреть сообщение
5 ошибок:
"no match for 'operator<' 'in' _a<_b' " строка 89;
"no match for 'operator<' 'in' _b<_c' "строка 90;
"no match for 'operator<' 'in' _a<_c' "строка 92;
"no match for 'operator<' 'in' _a<_c' "строка 96;
"no match for 'operator<' 'in' _b<_c' " строка 98;
Телепатией не владею, что в этих строках, знаете только Вы.
Но, судя по сообщению об ошибке, для _b и _c не задано поведение оператора <
То есть надо перегрузить оператор < для _b и _c.
Почитайте про перегрузку операторов (вот тут, например, или вот: раз и два).

Когда покажите код, можно будет о чём-то более предметно говорить.
0
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
15.02.2015, 09:52 #15
gru74ik, я уже решил эту проблему. Вместо
C++
1
2
3
 bool operator<(chopper& x) {//перегрузка оператора в классе, т.к без предиката сортировки
        
        return units < x.units;
надо
C++
1
2
3
 bool operator<(const chopper& x) const {//перегрузка оператора в классе, т.к без предиката сортировки
        
        return units < x.units;
Такой вариант в g++ скомпилировался. Без констант компилятор не видел operator<, так как он не соответствовал искомому прототипу. VC проглотил оба варианта.
1
15.02.2015, 09:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2015, 09:52

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. ...

Определить базовый класс и на его основе производные классы
Разработать консольную программу на языке С++, в которой необходимо определить...

Базовый класс Фигура, производные классы Окружность, Прямоугольник, Ромб
Подскажите верно ли сделана эта программа #include &quot;stdafx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru