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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Dzhalil
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 24
#1

Создать абстрактный класс Vehicle - C++

08.04.2013, 23:40. Просмотров 1642. Ответов 8
Метки нет (Все метки)

Создать абстрактный класс Vehicle (транспортное средство). На его основе реализовать
классы Plane (самолет), Саг (автомобиль) и Ship (корабль). Классы
должны иметь возможность задавать и получать координаты и параметры
средств передвижения (цена, скорость, год выпуска и т. п.) с помощью свойств.
Для самолета должна быть определена высота, для самолета и корабля — количество
пассажиров, для корабля — порт приписки. Динамические характеристики
задать с помощью методов.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 23:40     Создать абстрактный класс Vehicle
Посмотрите здесь:

Создать абстрактный класс Vehicle. На его основе реализовать классы: - C++
Создать абстрактный класс Vehicle. На его основе реализовать классы Car (автомобиль), Bicycle (велосипед) и Lorry (грузовик). Классы должны...

Создать класс Vehicle, соСдержащий следующие элементы: - C++
Создать класс Vehicle, соСдержащий следующие элементы: - поле «скорость» int Speed; - поле «масса» int Mass; - метод получения...

Создать абстрактный класс - C++
И вот ещё одно.... ))) Тоже очень надо на завтра..... Это всё одно задание..... =) пожалуйста... :-[ Создать абстрактный...

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

Создать абстрактный класс CVehicle - C++
Здравствуйте, товарищи! Задали задачу, не понимаю условие. Создать абстрактный класс CVehicle. На его основе реализовать классы...

Создать абстрактный класс Integer - C++
Создать абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на экран. Определить...

Создать список, содержащий абстрактный класс - C++
#include <list> #include <iostream> using namespace std; class CGraphicsObject { public: virtual double area() const =...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
09.04.2013, 01:32     Создать абстрактный класс Vehicle #2
Если что-то не понятно, то спрашивай. Остальные классы самостоятельно (по аналогии класса Plane). Компилятор MinGW.
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
#include <iostream>
#include <string>
#include <iomanip>
 
using namespace std;
 
unsigned table(23);
 
enum Colors {red = 0, black, blue, green, yellow, white, unknown};
 
class Color
{
public:
    Color(Colors _col): col(_col) {}
    string to_string()
    {
        string arr[] = {"red", "black", "blue", "green", "yellow", "white", "unknown"};
        return arr[col];
    }
private:
    Colors col;
};
 
class Vehicle
{
public:
    Vehicle():
        model(), enginePower(0), seats(0), maxSpeed(0), color(unknown),
        weight(0), releaseYear(0), price(0) {}
 
    Vehicle(const string&, float, unsigned, float, Color, float, unsigned, float);
 
    void setModel(const string &str) {  model = str;    };
    void setColor(Color col) {  color = col;    };
    void setPrice(float val) {  price = val;    };
    float getWeight() const {   return weight;  };
 
protected:
    string model;
    float enginePower;
    unsigned seats;
    float maxSpeed;
    Color color;
    float weight;
    unsigned releaseYear;
    float price;
 
    void print();
};
 
class Plane: public Vehicle
{
public:
    Plane(): Vehicle(), height(0), crewCount(0) {}
 
    Plane(float, unsigned, const string&, float, unsigned, float, Color, float, unsigned, float);
 
    void print();
    void setHeight(float val) { height = val;   };
    float getHeight() const {   return height;  };
 
private:
    float height;
    unsigned crewCount;
};
 
Vehicle::Vehicle(const string &_model, float _enPwr, unsigned _seats,
                 float _maxSpd, Color _col, float _weight, unsigned _relYear, float _price):
    model(_model), enginePower(_enPwr), seats(_seats), maxSpeed(_maxSpd), color(_col),
    weight(_weight), releaseYear(_relYear), price(_price) {}
 
Plane::Plane(float _height, unsigned _crews, const string &_model, float _enPwr, unsigned _seats,
            float _maxSpd, Color _col, float _weight, unsigned _relYear, float _price):
    Vehicle(_model, _enPwr, _seats, _maxSpd, _col, _weight, _relYear, _price),
    height(_height), crewCount(_crews) {}
 
void Vehicle::print()
{
    cout<<fixed<<setprecision(1);
    cout<<setw(table)<<left;
    cout<<setw(table)<<left<<"Модель: "<<model<<endl
        <<setw(table)<<left<<"Мощность двигателя: "<<enginePower<<endl
        <<setw(table)<<left<<"Мест: "<<seats<<endl
        <<setw(table)<<left<<"Максимальная скорость: "<<maxSpeed<<endl
        <<setw(table)<<left<<"Цвет: "<<color.to_string()<<endl
        <<setw(table)<<left<<"Вес: "<<weight<<endl
        <<setw(table)<<left<<"Год выпуска: "<<releaseYear<<endl
        <<setw(table)<<left<<"Цена: "<<price<<endl;
}
 
void Plane::print()
{
    Vehicle::print();
    cout<<setw(table)<<left<<"Высота: "<<height<<endl
        <<setw(table)<<left<<"Экипаж: "<<crewCount<<endl;
}
int main()
{
    setlocale(LC_CTYPE, "");
 
    Plane pl(50, 4, "Боинг 776", 10, 88, 800, white, 30, 1998, 3000000);
    pl.print();
    cout<<endl;
    pl.setColor(black);
    pl.setHeight(120);
    pl.print();
 
    cout<<endl<<pl.getWeight();
    return 0;
}
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
09.04.2013, 09:21     Создать абстрактный класс Vehicle #3
Olivеr, почему у вас класс-родитель имеет все характеристики? Он же награждает ими те классы, которым они не нужны. Это некорректно.

Задача откровенно на декомпозицию и выявление общих характеристик объектов.
Реализаций бесконечное количество, предлагаю вот такую, с выделением двух дополнительных "интерфейсов".
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
#include <iostream>
 
// "интерфейс", умеющий работать с координатами
class Placable {
 public:
  Placable() : latitude(0), longitude(0) {}
  Placable(double latitude, double longitude) : latitude(latitude),
    longitude(longitude) {}
  double getLatitude() const { return latitude; }
  double getLongitude() const { return longitude; }
  void setLatitude(double value) { latitude = value; }
  void setLongitude(double value) { longitude = value; }
 private:
  double latitude, longitude;
};
 
// "интерфейс" для работы с количеством мест
class PassengerTransporter {
 public:
  PassengerTransporter() : numberOfSeats(0) {}
  PassengerTransporter(int numberOfSeats)
    : numberOfSeats(numberOfSeats) {}
  int getNumberOfSeats() const { return numberOfSeats; }
  void setNumberOfSeats(int value) { numberOfSeats = value; }
 private:
  int numberOfSeats;
};
 
class Vehicle : public Placable {
 public:
  Vehicle() : Placable(), cost(0), speed(0), year(0) {}
  Vehicle(int cost, int speed, int year) : Placable(), cost(cost),
    speed(speed), year(year) {}
  int getCost() const { return cost; }
  int getSpeed() const { return speed; }
  int getYear() const { return year; }
  void setCost(int value) { cost = value; }
  void setSpeed(int value) { speed = value; }
  void setYear(int value) { year = value; }
 private:
  int cost;
  int speed;
  int year;
};
 
class Plain : public Vehicle, public PassengerTransporter {
 public:
  Plain() : Vehicle(), PassengerTransporter(), height(0) {}
  Plain(int cost, int speed, int year, int height)
    : Vehicle(cost, speed, year), PassengerTransporter(),
    height(height) {}
  int getHeight() const { return height; }
  void setHeight(int value) { height = value; }
 private:
  int height;
};
 
class Ship : public Vehicle, public PassengerTransporter {
 public:
  Ship() : Vehicle(), PassengerTransporter() {}
  Ship(int cost, int speed, int year, int homePort)
    : Vehicle(cost, speed, year), PassengerTransporter(),
    homePort(homePort) {}
  int getHomePort() const { return homePort; }
  void setHomePort(int value) { homePort = value; }
 private:
  int homePort;
};
 
class Car : public Vehicle {
  Car() : Vehicle() {}
  Car(int cost, int speed, int year) : Vehicle(cost, speed, year) {}
};
 
int main(int argc, char *argv[]) {
 
 
  std::cin.get();
  return 0;
}
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
09.04.2013, 09:31     Создать абстрактный класс Vehicle #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Olivеr,
lemegeton,
Вы не обратили внимание, что автору поста дали задание на полиморфизм.
Базовый класс должен иметь чистые виртуальные функции и, соответственно,
в коде надо продемонстрировать работу виртуального механизма.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
09.04.2013, 09:47     Создать абстрактный класс Vehicle #5
Цитата Сообщение от zss Посмотреть сообщение
Вы не обратили внимание, что автору поста дали задание на полиморфизм.
Good point.

Цитата Сообщение от zss Посмотреть сообщение
Базовый класс должен иметь чистые виртуальные функции и, соответственно,
в коде надо продемонстрировать работу виртуального механизма.
С этим хуже. Задание не нуждается в реализации через виртуальные механизмы.

Можно просто завиртуализивровать деструктор, сделав класс абстрактным.
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
#include <iostream>
 
class Placable {
 public:
  Placable() : latitude(0), longitude(0) {}
  Placable(double latitude, double longitude) : latitude(latitude),
    longitude(longitude) {}
  double getLatitude() const { return latitude; }
  double getLongitude() const { return longitude; }
  void setLatitude(double value) { latitude = value; }
  void setLongitude(double value) { longitude = value; }
 private:
  double latitude, longitude;
};
 
class PassengerTransporter {
 public:
  PassengerTransporter() : numberOfSeats(0) {}
  PassengerTransporter(int numberOfSeats)
    : numberOfSeats(numberOfSeats) {}
  int getNumberOfSeats() const { return numberOfSeats; }
  void setNumberOfSeats(int value) { numberOfSeats = value; }
 private:
  int numberOfSeats;
};
 
class Vehicle : public Placable {
 public:
  Vehicle() : Placable(), cost(0), speed(0), year(0) {}
  Vehicle(int cost, int speed, int year) : Placable(), cost(cost),
    speed(speed), year(year) {}
  virtual ~Vehicle() = 0;
  int getCost() const { return cost; }
  int getSpeed() const { return speed; }
  int getYear() const { return year; }
  void setCost(int value) { cost = value; }
  void setSpeed(int value) { speed = value; }
  void setYear(int value) { year = value; }
 private:
  int cost;
  int speed;
  int year;
};
Vehicle::~Vehicle() {}
 
class Plain : public Vehicle, public PassengerTransporter {
 public:
  Plain() : Vehicle(), PassengerTransporter(), height(0) {}
  Plain(int cost, int speed, int year, int height)
    : Vehicle(cost, speed, year), PassengerTransporter(),
    height(height) {}
  int getHeight() const { return height; }
  void setHeight(int value) { height = value; }
 private:
  int height;
};
 
class Ship : public Vehicle, public PassengerTransporter {
 public:
  Ship() : Vehicle(), PassengerTransporter() {}
  Ship(int cost, int speed, int year, int homePort)
    : Vehicle(cost, speed, year), PassengerTransporter(),
    homePort(homePort) {}
  int getHomePort() const { return homePort; }
  void setHomePort(int value) { homePort = value; }
 private:
  int homePort;
};
 
class Car : public Vehicle {
 public:
  Car() : Vehicle() {}
  Car(int cost, int speed, int year) : Vehicle(cost, speed, year) {}
};
 
int main(int argc, char *argv[]) {
 
  std::cin.get();
  return 0;
}
Dzhalil, есть понимание задачи? Какое-нибудь общее свойство всех классов, которое ведет себя по-разному в каждом классе?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.04.2013, 10:24     Создать абстрактный класс Vehicle #6
Olivеr,
C++
1
2
3
4
5
string to_string()
    {
        string arr[] = {"red", "black", "blue", "green", "yellow", "white", "unknown"};
        return arr[col];
    }
Массив прям ведь просится быть статиком да и констом вцелом
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
09.04.2013, 12:35     Создать абстрактный класс Vehicle #7
Цитата Сообщение от lemegeton Посмотреть сообщение
Olivеr, почему у вас класс-родитель имеет все характеристики? Он же награждает ими те классы, которым они не нужны. Это некорректно.
Как мне кажется, такие характеристики как
C++
1
2
3
4
5
6
7
8
    string model;
    float enginePower;//это можно переделать в класс
    unsigned seats; //а это лучше сделать как у Вас
    float maxSpeed;
    Color color;
    float weight;
    unsigned releaseYear;
    float price;
являются общими для классов автомобиля, самолета и корабля.

Цитата Сообщение от ForEveR Посмотреть сообщение
Массив прям ведь просится быть статиком да и констом вцелом
Согласен.

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
#include <iostream>
#include <string>
#include <iomanip>
 
using namespace std;
 
unsigned table(23);
enum Colors {red = 0, black, blue, green, yellow, white, unknown};
 
class Color
{
public:
    Color(Colors _col): col(_col) {}
    Color(): col(unknown) {}
    string to_string() {    return arr[col];    }
    static const string arr[];
private:
    Colors col;
};
 
const string Color::arr[] = {"red", "black", "blue", "green", "yellow", "white", "unknown"};
 
class Vehicle
{
public:
    Vehicle():
        model(), enginePower(0), seats(0), maxSpeed(0), color(),
        weight(0), releaseYear(0), price(0) {cout<<"Vehicle standard constructor"<<endl;}
 
    Vehicle(const string&, float, unsigned, float, Color, float, unsigned, float);
 
    Vehicle(const Vehicle&);
 
    void setModel(const string &str) {  model = str;    };
    void setColor(Color col) {  color = col;    };
    void setPrice(float val) {  price = val;    };
    float getWeight() const {   return weight;  };
 
protected:
    string model;
    float enginePower;
    unsigned seats;
    float maxSpeed;
    Color color;
    float weight;
    unsigned releaseYear;
    float price;
 
    void print();
};
 
class Plane: public Vehicle
{
public:
    Plane(): Vehicle(), height(0), crewCount(0) {cout<<"Plane standard constructor"<<endl;}
 
    Plane(float, unsigned, const string&, float, unsigned, float, Color, float, unsigned, float);
 
    Plane(const Plane&);
 
    void print();
    void setHeight(float val) { height = val;   };
    float getHeight() const {   return height;  };
 
private:
    float height;
    unsigned crewCount;
};
 
Vehicle::Vehicle(const string &_model, float _enPwr, unsigned _seats,
                 float _maxSpd, Color _col, float _weight, unsigned _relYear, float _price):
    model(_model), enginePower(_enPwr), seats(_seats), maxSpeed(_maxSpd), color(_col),
    weight(_weight), releaseYear(_relYear), price(_price) {}
 
Plane::Plane(float _height, unsigned _crews, const string &_model, float _enPwr, unsigned _seats,
            float _maxSpd, Color _col, float _weight, unsigned _relYear, float _price):
    Vehicle(_model, _enPwr, _seats, _maxSpd, _col, _weight, _relYear, _price),
    height(_height), crewCount(_crews) {}
 
Vehicle::Vehicle(const Vehicle &Obj):
    model(Obj.model), enginePower(Obj.enginePower), seats(Obj.seats), maxSpeed(Obj.maxSpeed),
    color(Obj.color), weight(Obj.weight), releaseYear(Obj.releaseYear), price(Obj.price) {cout<<"Vehicle copy constructor"<<endl;}
 
Plane::Plane(const Plane &Obj):
    Vehicle(Obj), height(Obj.height), crewCount(Obj.crewCount) {cout<<"Plane copy constructor"<<endl;}
 
void Vehicle::print()
{
    cout<<fixed<<setprecision(1);
    cout<<setw(table)<<left;
    cout<<setw(table)<<left<<"Модель: "<<model<<endl
        <<setw(table)<<left<<"Мощность двигателя: "<<enginePower<<endl
        <<setw(table)<<left<<"Мест: "<<seats<<endl
        <<setw(table)<<left<<"Максимальная скорость: "<<maxSpeed<<endl
        <<setw(table)<<left<<"Цвет: "<<color.to_string()<<endl
        <<setw(table)<<left<<"Вес: "<<weight<<endl
        <<setw(table)<<left<<"Год выпуска: "<<releaseYear<<endl
        <<setw(table)<<left<<"Цена: "<<price<<endl;
}
 
void Plane::print()
{
    Vehicle::print();
    cout<<setw(table)<<left<<"Высота: "<<height<<endl
        <<setw(table)<<left<<"Экипаж: "<<crewCount<<endl;
}
int main()
{
    setlocale(LC_CTYPE, "");
    cin.get();
    return 0;
}
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.04.2013, 12:41     Создать абстрактный класс Vehicle #8
Olivеr, Та его можно было и в функции оставить. Зачем он вне? Не суть конечно, но все же.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 07:40     Создать абстрактный класс Vehicle
Еще ссылки по теме:

Создать абстрактный класс A, который включает в себя: - C++
Помогите решить, пожалуйста. Спасибо. Создать абстрактный класс A, который включает в себя: два вещественных числа; конструктор с...

Создать абстрактный базовый класс с виртуальной функцией - C++
Создать абстрактный базовый класс с виртуальной функцией – значением функций в заданной точке. Создать производные классы: класс степенных...

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

Класс Vehicle - C++
Сделать класс Vehicle, который включает в себя следущие елементы: - Поле &quot;скорость&quot; int Speed; - Поле &quot;Масса&quot; int Mass; -...

Создать абстрактный базовый класс с виртуальными функциями - площадь и периметр - C++
Помогите написать,не врублюсь как писать много пропустил (( Задание:Создать абстрактный базовый класс с виртуальными функциями - площадь ...


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

Или воспользуйтесь поиском по форуму:
Dzhalil
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 24
15.04.2013, 07:40  [ТС]     Создать абстрактный класс Vehicle #9
Большое спасибо всем
Yandex
Объявления
15.04.2013, 07:40     Создать абстрактный класс Vehicle
Ответ Создать тему
Опции темы

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