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

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

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

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

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

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

Создать абстрактный базовый класс Vehicle - C++
Доброго всем дня! проблема в следующем - не могу понять условия задания. Мне главное что бы мне помогли сформировать условие задания. Вот...

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

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

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями - C++
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

Создать класс - данные - абстрактный базовый класс. Создать производные классы - C++
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа...

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

8
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
09.04.2013, 01:32 #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;
}
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
09.04.2013, 09:21 #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;
}
2
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,805
Завершенные тесты: 1
09.04.2013, 09:31 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Olivеr,
lemegeton,
Вы не обратили внимание, что автору поста дали задание на полиморфизм.
Базовый класс должен иметь чистые виртуальные функции и, соответственно,
в коде надо продемонстрировать работу виртуального механизма.
3
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
09.04.2013, 09:47 #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, есть понимание задачи? Какое-нибудь общее свойство всех классов, которое ведет себя по-разному в каждом классе?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.04.2013, 10:24 #6
Olivеr,
C++
1
2
3
4
5
string to_string()
    {
        string arr[] = {"red", "black", "blue", "green", "yellow", "white", "unknown"};
        return arr[col];
    }
Массив прям ведь просится быть статиком да и констом вцелом
2
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
09.04.2013, 12:35 #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;
}
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.04.2013, 12:41 #8
Olivеr, Та его можно было и в функции оставить. Зачем он вне? Не суть конечно, но все же.
1
Dzhalil
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 24
15.04.2013, 07:40  [ТС] #9
Большое спасибо всем
0
15.04.2013, 07:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 07:40
Привет! Вот еще темы с ответами:

Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle - C++
Создать абстрактный базовый класс Figure с виртуальной функцией -периметр.Создать производные классы Rectangle, Circle,Triangle,Rhomb в...

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

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

Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема - C++
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема:...


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

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

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