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

Абстрактный класс.производные функции - C++

Восстановить пароль Регистрация
 
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
22.05.2013, 15:43     Абстрактный класс.производные функции #1
Вот условие задачи
Кликните здесь для просмотра всего текста
Создать абстрактный класс транспортное средство Trans с методами позволяющим вывести на экран информацию о транспортном средстве, а также определить грузоподъемность транспортного средства.

Создать производные классы: Легковая_машина (марка, номер, скорость, грузоподъемность), Мотоцикл (марка, номер, скорость, грузоподъемность, наличие коляски, при этом если коляска отсутствует, то грузоподъемность равна 0), Грузовик (марка, номер, скорость, грузоподъемность, наличие прицепа, при этом если есть прицеп, то грузоподъемность увеличивается в два раза) со своими методами вывода информации на экран, и определения грузоподъемности.

Создать базу (массив) из n транспортных средств, вывести полную информацию из базы на экран, а также организовать поиск транспортных средств, удовлетворяющих требованиям грузоподъемности.


А вот список ошибок:
Кликните здесь для просмотра всего текста

[bcc32 Error] File3.cpp(31): E2238 Multiple declaration for '~Trans::Trans()'
Full parser context
File3.cpp(14): class Trans
[bcc32 Error] File3.cpp(30): E2344 Earlier declaration of '~Trans::Trans()'
Full parser context
File3.cpp(14): class Trans
[bcc32 Warning] File3.cpp(29): W8070 Function should return a value
Full parser context
File3.cpp(14): class Trans
File3.cpp(32): decision to instantiate: int Trans:rint()
--- Resetting parser context for instantiation...
File3.cpp(28): parsing: int Trans:rint()
[bcc32 Warning] File3.cpp(49): W8022 'Car::wgt()' hides virtual function 'Trans::wgt() const'
Full parser context
File3.cpp(34): class Car
[bcc32 Warning] File3.cpp(49): W8022 'Car:rint() const' hides virtual function 'Trans:rint()'
Full parser context
File3.cpp(34): class Car
[bcc32 Error] File3.cpp(38): E2188 Expression syntax
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: Car::Car(char *,char *,float,float)
--- Resetting parser context for instantiation...
File3.cpp(38): parsing: Car::Car(char *,char *,float,float)
[bcc32 Error] File3.cpp(43): E2275 { expected
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: Car::Car(char *,char *,float,float)
--- Resetting parser context for instantiation...
File3.cpp(38): parsing: Car::Car(char *,char *,float,float)
[bcc32 Error] File3.cpp(70): E2188 Expression syntax
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: Car::Car(char *,char *,float,float)
--- Resetting parser context for instantiation...
File3.cpp(38): parsing: Car::Car(char *,char *,float,float)
[bcc32 Error] File3.cpp(86): E2310 Only member functions may be 'const' or 'volatile'
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: Car::Car(char *,char *,float,float)
--- Resetting parser context for instantiation...
File3.cpp(38): parsing: Car::Car(char *,char *,float,float)
[bcc32 Error] File3.cpp(86): E2141 Declaration syntax error
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: Car::Car(char *,char *,float,float)
--- Resetting parser context for instantiation...
File3.cpp(38): parsing: Car::Car(char *,char *,float,float)
[bcc32 Error] File3.cpp(91): E2139 Declaration missing ;
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: Car::Car(char *,char *,float,float)
--- Resetting parser context for instantiation...
File3.cpp(38): parsing: Car::Car(char *,char *,float,float)
[bcc32 Warning] File3.cpp(43): W8070 Function should return a value
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: int Car:rintTransName() const
--- Resetting parser context for instantiation...
File3.cpp(41): parsing: int Car:rintTransName() const
[bcc32 Warning] File3.cpp(47): W8070 Function should return a value
Full parser context
File3.cpp(34): class Car
File3.cpp(49): decision to instantiate: int Car:rint() const
--- Resetting parser context for instantiation...
File3.cpp(44): parsing: int Car:rint() const
[bcc32 Warning] File3.cpp(51): W8098 Multi-character character constant
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(51): E2129 Character constant too long (or empty)
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(51): E2034 Cannot convert 'unsigned int' to 'const char *'
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(51): E2342 Type mismatch in parameter '__command' (wanted 'const char *', got 'unsigned int')
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(56): E2303 Type name expected
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(56): E2034 Cannot convert 'int *' to 'Trans *'
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(56): E2257 , expected
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(58): E2141 Declaration syntax error
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(58): E2139 Declaration missing ;
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Warning] File3.cpp(58): W8004 'a' is assigned a value that is never used
Full parser context
File3.cpp(50): parsing: int main()
[bcc32 Error] File3.cpp(58): E2190 Unexpected }
[bcc32 Error] File3.cpp(60): E2040 Declaration terminated incorrectly
[bcc32 Error] File3.cpp(60): E2141 Declaration syntax error
[bcc32 Error] File3.cpp(60): E2238 Multiple declaration for 'i'
[bcc32 Error] File3.cpp(60): E2344 Earlier declaration of 'i'
[bcc32 Error] File3.cpp(64): E2190 Unexpected }
Failed
Elapsed time: 00:00:00.1

Большое спасибо за помощь
C++ (Qt)
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
#include <math.h>
#include <iostream.h>
 
 
class Trans {
    float v;
    char  *m,*n;
 
    public:
        Trans(char *mm,char *nn, float vv){
            m=new char[strlen(mm)+1];
            strcpy(m,mm);
            n=new char[strlen(nn)+1];
            strcpy(n,nn);
            v=vv;
        }
        virtual float wgt() const { return 0; } // грузоподъемность
        virtual int printTransName() const = 0;
        virtual int print(){
        cout <<"марка" << m << " ,номер" << n << " ,скорость" << v << " "; }
        ~Trans(){delete[]m;};
        ~Trans(){delete[]n;};
};
 
class Car: public Trans{
    float w;
    public:
    float wgt() { return 0; }
        Car(char *mm,char *nn, float vv,float ww):Trans(char *mm,char *nn, float vv)  {
          w=ww;
        }
    int printTransName() const {
            cout << "легковая машина: ";
        }
    int print() const {
            Trans::print();
            cout <<"грузоподъемность="<< w << " "<<endl;
        };
 
};
 
 
class motocycle: public Trans{
    float w;
    public:
        motocycle(char *mm,char *nn, float vv,float ww):Trans(char *mm,char *nn, float vv)  {
          w=ww;
        }
        int wgt(){
        cout<<"Есть коляска для мотоцикла? да-y,нет-n"<<endl;
        char temp;
        cin >> temp;
        if (temp=='y') {
             ww+=100;
            }
        else (temp=='n'){};
        }
        int printTransName() const {
                cout << "Мотоцикл: ";
            };
        int print() const {
                Trans::print();
                cout <<"грузоподъемность="<< w << "кг "<<endl;
            }
 
};
 
class Gruzovik: public Trans{
    float w;
    public:
        Gruzovik(char *mm,char *nn, float vv,float ww):Trans(char *mm,char *nn, float vv)  {
          w=ww;
        }
        int wgt(){
        cout<<"Грузовик с прицепом? да-y,нет-n"<<endl;
        char temp;
        cin >> temp;
        if (temp=='y') {
             ww*=2
            }
        else (temp=='n'){};
        }
        int printTransName() const {
                cout << "Грузовик: ";
            };
        int print() const {
                Trans::print();
                cout <<"грузоподъемность="<< w << "кг "<<endl;
            }
 
};
int main(){
    system('chcp 1251');
 
    int a,b,c;
         Trans *a[3]={
         new Car("BMW","а111мр",210,40),
         new motocycle("BMW","123d",300,13),
         new Gruzovik("MAN","е777кх",150,3000) 
                     };
         int v;
        for(int i=0;i<3;i++){
             a[i]->print();   }
             
 
 
        getchar();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 15:43     Абстрактный класс.производные функции
Посмотрите здесь:

Абстрактный класс C++
C++ Абстрактный класс и его производные
C++ Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема C++
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sl_k
12 / 12 / 0
Регистрация: 15.04.2010
Сообщений: 61
22.05.2013, 16:18     Абстрактный класс.производные функции #2
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
#include <math.h>
#include <iostream>
#include <cstring> 
using namespace std; 
class Trans {
    float v;
    char  *m,*n;
 
    public:
        Trans(char *mm,char *nn, float vv){
            m=new char[strlen(mm)+1];
            strcpy(m,mm);
            n=new char[strlen(nn)+1];
            strcpy(n,nn);
            v=vv;
        }
        virtual float wgt() const { return 0; } // грузоподъемность
        virtual int printTransName() const = 0;
        virtual int print() const{
        cout <<"марка" << m << " ,номер" << n << " ,скорость" << v << " "; }
        ~Trans(){delete[]m; delete[]n;};
 
};
 
class Car: public Trans{
    float w;
    public:
    float wgt() { return 0; };
    Car(char *mm,char *nn, float vv,float ww):Trans(mm,nn,vv)  {
          w=ww;
        }
    int printTransName() const {
            cout << "легковая машина: ";
        }
    int print() const {
            Trans::print();
            cout <<"грузоподъемность="<< w << " "<<endl;
        };
 
};
 
 
class motocycle: public Trans{
    float w;
    public:
        motocycle(char *mm,char *nn, float vv,float ww):Trans(mm,nn, vv)  {
          w=ww;
        }
        int wgt(){
        cout<<"Есть коляска для мотоцикла? да-y,нет-n"<<endl;
        char temp;
        cin >> temp;
        if (temp=='y') {
             w+=100;
            }
        }
        int printTransName() const {
                cout << "Мотоцикл: ";
            };
        int print() const {
                Trans::print();
                cout <<"грузоподъемность="<< w << "кг "<<endl;
            }
 
};
 
class Gruzovik: public Trans{
    float w;
    public:
        Gruzovik(char *mm,char *nn, float vv,float ww):Trans(mm,nn, vv)  {
          w=ww;
        }
        int wgt(){
        cout<<"Грузовик с прицепом? да-y,нет-n"<<endl;
        char temp;
        cin >> temp;
        if (temp=='y') {
             w*=2;
            }
 
        }
        int printTransName() const {
                cout << "Грузовик: ";
            };
        int print() const {
                Trans::print();
                cout <<"грузоподъемность="<< w << "кг "<<endl;
            }
 
};
int main(){
 
    int a,b,c;
         Trans *ar[3]={
         new Car("BMW","а111мр",210,40),
         new motocycle("BMW","123d",300,13),
         new Gruzovik("MAN","е777кх",150,3000) 
                     };
         int v;
        for(int i=0;i<3;i++){
             ar[i]->print();   }
 
}
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
22.05.2013, 20:13  [ТС]     Абстрактный класс.производные функции #3
Спасибо! А как включить функцию wgt()?
C++
1
2
3
4
for(int i=0;i<3;i++){
                ar[i]->wgt();
             ar[i]->print();
      }
Таким способом 0 реакции...
sl_k
12 / 12 / 0
Регистрация: 15.04.2010
Сообщений: 61
22.05.2013, 20:29     Абстрактный класс.производные функции #4
weightless, а какая реакция должна быть. Функция же ничего не делает.

Добавлено через 7 минут
А, нашел. для грузовика. сейчас посмотрим

Добавлено через 5 минут
Прототипы функций должны быть одинаковыми для базового класса и наследников. У вас в базовом стоит float, а в дочерних int


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
#include <math.h>
#include <iostream>
#include <cstring> 
using namespace std; 
class Trans {
    float v;
    char  *m,*n;
 
    public:
        Trans(char *mm,char *nn, float vv){
            m=new char[strlen(mm)+1];
            strcpy(m,mm);
            n=new char[strlen(nn)+1];
            strcpy(n,nn);
            v=vv;
        }
        virtual int wgt() { return 0; } // грузоподъемность
        virtual int printTransName() const = 0;
        virtual int print() const{
        cout <<"марка" << m << " ,номер" << n << " ,скорость" << v << " "; }
        ~Trans(){delete[]m; delete[]n;};
 
};
 
class Car: public Trans{
    float w;
    public:
    int wgt() { return 0; };
    Car(char *mm,char *nn, float vv,float ww):Trans(mm,nn,vv)  {
          w=ww;
        }
    int printTransName() const {
            cout << "легковая машина: ";
        }
    int print() const {
            Trans::print();
            cout <<"грузоподъемность="<< w << " "<<endl;
        };
 
};
 
 
class motocycle: public Trans{
    float w;
    public:
        motocycle(char *mm,char *nn, float vv,float ww):Trans(mm,nn, vv)  {
          w=ww;
        }
        int wgt(){
        cout<<"Есть коляска для мотоцикла? да-y,нет-n"<<endl;
        char temp;
        cin >> temp;
        if (temp=='y') {
             w+=100;
            }
        return 0; 
        }
        int printTransName() const {
                cout << "Мотоцикл: ";
            };
        int print() const {
                Trans::print();
                cout <<"грузоподъемность="<< w << "кг "<<endl;
            }
 
};
 
class Gruzovik: public Trans{
    float w;
    public:
        Gruzovik(char *mm,char *nn, float vv,float ww):Trans(mm,nn, vv)  {
          w=ww;
        }
        int wgt(){
        cout<<"Грузовик с прицепом? да-y,нет-n"<<endl;
        char temp;
        cin >> temp;
        if (temp=='y') {
             w*=2;
            }
    return 0;
        }
        int printTransName() const {
                cout << "Грузовик: ";
            };
        int print() const {
                Trans::print();
                cout <<"грузоподъемность="<< w << "кг "<<endl;
            }
 
};
int main(){
 
    int a,b,c;
         Trans *ar[3]={
         new Car("BMW","а111мр",210,40),
         new motocycle("BMW","123d",300,13),
         new Gruzovik("MAN","е777кх",150,3000) 
                     };
         int v;
        for(int i=0;i<3;i++){
        ar[i]->wgt();             
        ar[i]->print();   }
 
}
Yandex
Объявления
22.05.2013, 20:29     Абстрактный класс.производные функции
Ответ Создать тему
Опции темы

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