Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
uninstall
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 16
#1

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

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

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

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

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

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

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

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

Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент» - C++
Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент». Создать массив объектов базового класса и заполнить этот...

14
pdmitriya
8 / 8 / 1
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 29.01.2015
Сообщений: 57
10.02.2015, 19:18 #6
завтра выложу решение
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
10.02.2015, 20:15 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
как-то так
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 / 11
Регистрация: 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 / 1
Регистрация: 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
gru74ik
Модератор
Эксперт CЭксперт С++
4360 / 1936 / 210
Регистрация: 20.02.2013
Сообщений: 5,138
Записей в блоге: 22
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
gru74ik
Модератор
Эксперт CЭксперт С++
4360 / 1936 / 210
Регистрация: 20.02.2013
Сообщений: 5,138
Записей в блоге: 22
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 / 11
Регистрация: 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
Привет! Вот еще темы с ответами:

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения - C++
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;typeinfo&gt; using...

Создать абстрактный базовый класс Figure и производные классы Rectangle, Circle - C++
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Создать производные классы: Rectangle...

Создайте исходный базовый класс building, производные классы house и office - C++
Здравствуйте, помогите пожалуйста с решением задачи. Создайте исходный базовый класс building для хранения числа этажей и комнат в...

Создать базовый класс «Музыкальный инструмент» и производные классы «Ударный», «Струнный», «Духовой» - C++
Создать базовый класс «Музыкальный инструмент» и производные классы «Ударный», «Струнный», «Духовой». Создать массив объектов «Оркестр»....


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

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

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