Форум программистов, компьютерный форум CyberForum.ru

Наследование - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как создать Разряженная Ленточная матрица http://www.cyberforum.ru/cpp-beginners/thread840000.html
Как создать разряженную ленточную матрицу, так что бы мы вводили только Например 1, 2, 3, и получали: 100 020 030 я нашел на форуме пример, но он не совмещается так как изначально принимал значения INT, я исправил на double но не работает... подскажите свои варианты создания Разряженной ленточной матрице... А вот что я нашел на форуме: int getEl(double ** array, int v, int h, int...
C++ Вычислить двойной интеграл методом Гаусса Неправильный результат выдаёт. Помогите найти в чём ошибка. (Visual C++ 2008) #include "stdafx.h" #include <iostream> #include <math.h> #include <stdio.h> #include <conio.h> #include <windows.h> #include <stdlib.h> http://www.cyberforum.ru/cpp-beginners/thread839999.html
C++ шахматы
Совсем беда, об ООП имею весьма неясные представления по части "какие возможности есть и как вообще это записать". Пересадили за Qt внезапно. Есть задача написать шахматы. Без ИИ, просто проверка на правильность хода каждого игрока. конкретный вопрос: Как организовать классы, чтобы привязать изображения и функции к кнопкам? так понимаю, нужно использовать класс QObject для клеток, отдельный...
Дано дерево и два узла. Найти кратчайшее расстояние между узлами. C++
Дано дерево и два узла. Найти кратчайшее расстояние между узлами.
C++ Вызов функции из массива, через указатель http://www.cyberforum.ru/cpp-beginners/thread839985.html
имею код #include <iostream> #include <vector> #include <utility> using namespace std; void Func() { cout<<"pFunc()"; } int main()
C++ В чем смысл выражения "y+='A'-10" ? В чем смысл выражения y+='A'-10; подробнее

Показать сообщение отдельно
Angels737
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 17

Наследование - C++

16.04.2013, 23:02. Просмотров 460. Ответов 17
Метки (Все метки)

Добрый вечер, помогите пожалуйста с наследованием. Написал программу ( ниже ), но как видите пришлось в классе-наследнике Bus ( Vehicle базовый ) ещё раз писать функции arrive()/leave(), так как я несмог через Vehicle обратиться и изменить переменные класса Bus. Вопрос в том как именно осуществлять эти обращения

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <assert.h>
using namespace std;
 
int people_on_base=100;
int vehicles_on_base=30;
double petrol_on_base=700;
double goods_on_base=45;
 
 
 
class Vehicle
{
protected:
    int people;
    double Petrol_Amount;
    double Tank_Volume;
public:
    Vehicle(double petrol_amount, double tank_volume):Petrol_Amount(petrol_amount),Tank_Volume(tank_volume),people(1){}
    double getTankVolume() const
    {
        return Tank_Volume;
    }
    double getPetrolAmount() const
    {
        return Petrol_Amount;
    }
    void arrive()
    {
        people_on_base++;
        vehicles_on_base++;
    }
    int leave()
    {
        people_on_base--;
        vehicles_on_base--;
        petrol_on_base=petrol_on_base-Tank_Volume+Petrol_Amount;
        return 0;
    }
};
 
class Bus : public Vehicle
{
protected:
    int PeopleCount;
    int MaxPeople;
public:
    Bus(int people, int max_people, double petrol, double max_petrol):PeopleCount(people),MaxPeople(max_people),Vehicle(petrol,max_petrol){}
    int getPeopleCount() const
    {
        return PeopleCount;
    }
    int getMaxPeople() const
    {
        return MaxPeople;
    }
    void arrive()
    {
        people_on_base=people_on_base+getPeopleCount()+1;
        vehicles_on_base++;
        PeopleCount=0;
    }
    int leave()
    {
        people_on_base=people_on_base-getMaxPeople()-1;
        vehicles_on_base--;
        petrol_on_base=petrol_on_base+(-Tank_Volume+Petrol_Amount);
        Petrol_Amount=Tank_Volume;
        PeopleCount=MaxPeople;
        return 0;
    }
};
 
class Truck : public Vehicle
{
protected:
    double goods;
public:
    Truck(double load, double max_load, double petrol, double max_petrol);
    double getCurrentLoad() const;
    double getMaxLoad() const;
};
 
int main()
{
 
    Bus v(32.5, 40, 19.5, 60);
 
cout << "Bus:\n";
cout << "People = " << v.getPeopleCount() << "\n";
cout << "Max people = " << v.getMaxPeople() << "\n";
cout << "Petrol = " << v.getPetrolAmount() << "\n";
cout << "Tank = " << v.getTankVolume() << "\n";
 
vehicles_on_base = 49;
people_on_base = 84;        // count
petrol_on_base = 1051;      // liters
goods_on_base  = 5.032;     // tons
 
cout << "\nBefore:\n";
cout << vehicles_on_base << "\n";
cout << people_on_base << "\n";
cout << petrol_on_base << "\n";
cout << goods_on_base << "\n";
 
// arrive
v.arrive();
 
cout << "\nArrived Bus:\n";
cout << "People = " << v.getPeopleCount() << "\n";
cout << "Max people = " << v.getMaxPeople() << "\n";
cout << "Petrol = " << v.getPetrolAmount() << "\n";
cout << "Tank = " << v.getTankVolume() << "\n";
 
cout << "\nArrived:\n";
cout << vehicles_on_base << "\n";
cout << people_on_base << "\n";
cout << petrol_on_base << "\n";
cout << goods_on_base << "\n";
 
// leave
assert(v.leave() >= 0);
 
cout << "\nLeft Bus:\n";
cout << "People = " << v.getPeopleCount() << "\n";
cout << "Petrol = " << v.getPetrolAmount() << "\n";
cout << "Tank = " << v.getTankVolume() << "\n";
 
cout << "\nLeft:\n";
cout << vehicles_on_base << "\n";
cout << people_on_base << "\n";
cout << petrol_on_base << "\n";
cout << goods_on_base << "\n";
 
    return 0;
}
Добавлено через 9 минут
Тоесть просто нужно чтоб функции arrive()/leave() были не в классе Bus, а в классе Vehicle (базовом)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru