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

Абстрактный базовый класс и множественное наследование (либо иерархия классов) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
temask
0 / 0 / 0
Регистрация: 26.07.2010
Сообщений: 25
15.12.2011, 11:49     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #1
Помогите пожалуйста с задачей. Кое-что написал но еще далеко не все. Все ли пока правильно?


Мобильные телефоны (наименование, фирма, стандарт связи, заряд аккумулятора, потребление при ожидании, потребление при разговоре, время ожидания - функция Run (), время разговора –функция Run1 ()).

Общая постановка. Создать программу с абстрактным базовым классом и множественным наследованием,(либо иерархией классов) реализовать в нем:
- конструктор,
- деструктор,
- виртуальную функцию просмотра текущего состояния объекта print(),
- friend – функцию Run ().
Производные классы должны содержать переопределенную функцию просмотра состояния объектов, а также при вводе – выводе данных использовать функции обработки исключительных ситуаций. Используя стандартные файловые потоки, информацию об объектах вывести в файл.Для корректной работы с файлом использовать обработку исключительных ситуаций.

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
#include <iostream>
#include <string.h>
#include <conio.h>
#include <iomanip>
 
using namespace std;
 
class cMobil{
    public:
        virtual ~cMobil();          
        virtual void print();       
        static void PrintAll();
        static void DeleteAll();
        cMobil (const char *NAME);
        char* name;     //Наименование
        char firma[30]; //Фирма
        char standart[30];  //Стандарт связи
        int akm;        //Заряд аккумулятора
        int po;         //Потребление при ожидании
        int pr;         //Потребление при разговоре
    private:
        cMobil* next;
        static cMobil* first;   
};
 
class cTime: public cMobil{
    public:
        cTime (const char *NAME);
        void print();   
        friend float Run(int AKM,int PO);
        friend float Run1(int AKM,int PR);  
};
 
cMobil* cMobil::first=NULL;
 
cMobil::cMobil(const char *NAME){
    name = new char [strlen(NAME)+1];
    strcpy (name,NAME);
    cout<<"Firm: ";
    cin>>firma;
    cout<<"Standard connection: ";
    cin>>standart;
    cout<<"Battery charge: ";
    cin>>akm;
    cout<<"Consumption at expectation: ";
    cin>>po;
    cout<<"Consumption at conversation: ";
    cin>>pr;
    next=first;
    first=this;
    cout<<"\nData is accepted. Press any key to continue";
    getch();
    system("cls");
}
 
cMobil::~cMobil(){
    delete [] name;
}
 
float Run(int AKM, int PO){
    float rez = AKM / PO;
    return rez;
}
 
float Run1(int AKM,int PR){
    float rez = AKM / PR;
    return rez;
}
 
void cMobil::print(){
cout<<endl;
cout<<"|"<<setw(8)<<name<<"|"<<setw(8)<<firma<<"|"<<setw(19)<<standart<<"|"<<setw(14)<<akm<<"|"<<setw(26)<<po<<"|"<<setw(27)<<pr;
}
 
cTime::cTime(const char *NAME):cMobil(NAME)
    {
    //...
    }
 
void cTime::print(){
    cMobil::print();
    cout<<"|"<<setw(12)<<Run(akm,po)<<"|"<<setw(17)<<Run1(akm,pr)<<"|";
    cout<<endl;
    cout<<"--------------------------------------------------------------------------------------------------------------------------------------------";
}
 
void cMobil::PrintAll()
{
    cout<<"--------------------------------------------------------------------------------------------------------------------------------------------";
    cout<<endl;
    cout<<"|  Name  |  Firm  |Standard connection|Battery charge|Consumption at expectation|Consumption at conversation|Waiting time|Conversation time|";
    cout<<endl;
    cout<<"--------------------------------------------------------------------------------------------------------------------------------------------";
    cMobil* pMobil=first;
    while(pMobil)
    {
        pMobil->print();
        pMobil=pMobil->next;
    }
    cout<<"\nPress any key to continue";
    getch();
    system("cls");
}
 
 
int main()
    {
        int x;
        do{
            cout<<"\nSelect the menu item:"<<endl;
            cout<<"\n1 - Data input\n2 - Printing on screen\n3 - Print to file\n4 - Exit\n"<<endl;
            cout<<"You have chosen: ";
            cin>>x;
            switch (x)
            {
                case 1:
                    system("cls");
                    char name[100];
                    cout<<"Name: ";
                    cin>>name;
                    new cTime(name);
                    break;
                case 2:
                    system("cls");
                    cMobil::PrintAll();
                    break;
                case 3:
                    system("cls");
                    break;
            }
        }while(x!=4);
        return 0;
    }
Добавлено через 20 часов 51 минуту
Очень нужна помощь.

 Комментарий модератора 
Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.
Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 11:49     Абстрактный базовый класс и множественное наследование (либо иерархия классов)
Посмотрите здесь:

Наследование классов. Используя базовый класс Point {x, y, цвет} разработать производные классы механизма двигателя. C++
Создать абстрактный базовый класс объектов на декартовой плоскости CShape и разработать иерархию классов конкретных фигур C++
Множественное наследование (Разработайте базовый класс CLIENT) C++
Иерархия классов и указатель на базовый класс C++
C++ Создать иерархию классов, представляющих простое наследование. Базовый класс – строка символов (char *)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
temask
0 / 0 / 0
Регистрация: 26.07.2010
Сообщений: 25
19.12.2011, 13:33  [ТС]     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #2
Что никто не знает?
absokolov
29 / 29 / 1
Регистрация: 10.05.2011
Сообщений: 120
19.12.2011, 13:40     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #3
Все смотреть не стал!
Но я вижу что после "new cTime(name);" не происходит delete! Почему бы просто не создать объект класса?
temask
0 / 0 / 0
Регистрация: 26.07.2010
Сообщений: 25
19.12.2011, 13:46  [ТС]     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #4
Цитата Сообщение от absokolov Посмотреть сообщение
Все смотреть не стал!
Но я вижу что после "new cTime(name);" не происходит delete! Почему бы просто не создать объект класса?
cMobil::~cMobil(){
delete [] name;
}
absokolov
29 / 29 / 1
Регистрация: 10.05.2011
Сообщений: 120
19.12.2011, 13:53     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #5
Ну так это деструктор самого класса!
А кто вызовет этот самый деструктор?
При создании объекта типа "cMobil obj;" - компилятор сам вызовет деструктор! А вот ч-з "new" - позаботится от этом нужно Вам!
temask
0 / 0 / 0
Регистрация: 26.07.2010
Сообщений: 25
19.12.2011, 14:00  [ТС]     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #6
Цитата Сообщение от absokolov Посмотреть сообщение
Ну так это деструктор самого класса!
А кто вызовет этот самый деструктор?
При создании объекта типа "cMobil obj;" - компилятор сам вызовет деструктор! А вот ч-з "new" - позаботится от этом нужно Вам!
Как мне лучше исправить
absokolov
29 / 29 / 1
Регистрация: 10.05.2011
Сообщений: 120
19.12.2011, 14:15     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #7
C++
1
cTime obj(name);
temask
0 / 0 / 0
Регистрация: 26.07.2010
Сообщений: 25
19.12.2011, 14:44  [ТС]     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #8
Цитата Сообщение от absokolov Посмотреть сообщение
C++
1
cTime obj(name);
1>d:\trposu\trposu\trposu.cpp(110): error C2512: cTime: нет подходящего конструктора по умолчанию
1>d:\trposu\trposu\trposu.cpp(128): error C2360: пропуск инициализации "obj" из-за метки "case"
1> d:\trposu\trposu\trposu.cpp(125): см. объявление "obj"
1>d:\trposu\trposu\trposu.cpp(132): error C2360: пропуск инициализации "obj" из-за метки "case"
1> d:\trposu\trposu\trposu.cpp(125): см. объявление "obj"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2011, 18:33     Абстрактный базовый класс и множественное наследование (либо иерархия классов)
Еще ссылки по теме:

C++ Множественное наследование. Построение производных классов
C++ Абстрактный базовый класс и множественное наследование
C++ Наследование классов С++ (не могу правильно унаследовать базовый класс)

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

Или воспользуйтесь поиском по форуму:
temask
0 / 0 / 0
Регистрация: 26.07.2010
Сообщений: 25
21.12.2011, 18:33  [ТС]     Абстрактный базовый класс и множественное наследование (либо иерархия классов) #9
Помогите пожалуйста доделать программу!!!
Yandex
Объявления
21.12.2011, 18:33     Абстрактный базовый класс и множественное наследование (либо иерархия классов)
Ответ Создать тему
Опции темы

Текущее время: 23:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru