Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1

Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью

15.02.2014, 12:45. Показов 9477. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью. Определить методы переназначения и изменения мощности. Создать производный класс Lorry (грузовик), характеризуемый также грузоподъемностью кузова. Определить функции переназначения марки и изменения грузоподьемности.
Реализировать вывод на экран, методы получения значений полей и методы установки значений полей, а также необходимые конструкторы (если это не указано в задании явно). Конструкторы и методы обязательно должны проверять параметры на допустимость; в случае неправильных данных - выводить значение об ошибке и заканчивать работу. Преобразование в строку реализовать в виде функции преобразования string.



Надеюсь нигде не ошибся (я про память, вроде всё в стеке создаётся и при выходе из main уничтожается), так как С++ я так и не начал нормально учить, время не бесконечное, к сожалению . Как создаст тему (если создаст, можно туда код и перенести будет).
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
#include <iostream>
#include "Lorry.h"
 
using namespace std;
 
void DisplayCarInfo(Car cars[], int length, string infoSeparator);
void DisplayCarInfo(Car * car, string infoSeparator);
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    const int arrayLength = 2;
    Car cars[arrayLength] = { Car("Ford", 330u, 8u), Lorry("Scania", 750u, 12u, 30000u) };
    DisplayCarInfo(cars, arrayLength, "\r\n");
 
    system("pause");
    return EXIT_SUCCESS;
}
 
void DisplayCarInfo(Car cars[], int length, string infoSeparator)
{
    for (int i = 0; i < length; i++)
    {
        DisplayCarInfo(&cars[i], infoSeparator);
    }
}
 
void DisplayCarInfo(Car* car, string infoSeparator)
{
    cout << "Торговая марка: " << car->GetTradeMark() << " " << "Мощность: " << car->GetEnginePower() << infoSeparator << endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include <string>
 
using namespace std;
 
class Car
{
protected:
    string _tradeMark;
    unsigned int _enginePower;
    unsigned int _numberOfCylinders;
 
public:
    Car(string tradeMark, unsigned int enginePower, unsigned int numberOfCylinders);
    ~Car(void);
 
    string GetTradeMark() const;
    void SetTradeMark(string name);
 
    unsigned int GetEnginePower()  const;
    unsigned int GetNumberOfCylinders();
};
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
#pragma once
#include "Car.h"
 
Car::Car(string tradeMark, unsigned int enginePower, unsigned int numberOfCylinders)
{
    _tradeMark = tradeMark;
    _enginePower = enginePower;
    _numberOfCylinders = numberOfCylinders;
}
 
Car::~Car(void)
{
}
 
string Car::GetTradeMark() const
{
    return _tradeMark;
}
 
void Car::SetTradeMark(string name)
{
    _tradeMark = name;
}
 
unsigned int Car::GetEnginePower() const
{
    return _enginePower;
}
 
unsigned int  Car::GetNumberOfCylinders()
{
    return _numberOfCylinders;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
#include "car.h"
 
class Lorry :
    public Car
{
protected:
    unsigned int _weight_CarryingAbility;
 
public:
    Lorry(string tradeMark, unsigned int enginePower, unsigned int numberOfCylinders, unsigned int weight_CarryingAbility);
 
    ~Lorry(void);
 
    unsigned int GetWeight_CarryingAbility() const;
    void SetWeight_CarryingAbility(unsigned int weight);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "Lorry.h"
 
Lorry::Lorry(string tradeMark, unsigned int enginePower, unsigned int numberOfCylinders, unsigned int weight_CarryingAbility)
    : Car(tradeMark, enginePower, numberOfCylinders)
{
    _weight_CarryingAbility = weight_CarryingAbility;
}
 
Lorry::~Lorry(void)
{
}
 
unsigned int Lorry::GetWeight_CarryingAbility() const
{
    return _weight_CarryingAbility;
}
 
void Lorry::SetWeight_CarryingAbility(unsigned int weight)
{
    _weight_CarryingAbility = weight;
}
Добавлено через 12 минут
Чуть поправил один момент
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2014, 12:45
Ответы с готовыми решениями:

Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью
Кому не трудно, помогите с решением задачи! Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом...

Создать базовый класс Саг, характеризуемый торговой маркой (строка), весом, мощностью. Определить методы перен
Создать базовый класс Саг, характеризуемый торговой маркой (строка), весом, мощностью. Определить методы переназначения и изменения...

Создать базовый класс Car(машина)
Создать базовый класс Car(машина), характерезуемой торговой маркой , числом цилиндров , мощностью. Определить методы изменения мощности и...

5
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.02.2014, 14:14
Цитата Сообщение от Casper-SC Посмотреть сообщение
C++
1
2
unsigned int GetEnginePower() const;
unsigned int GetNumberOfCylinders();
что за дискриминация GetNumberOfCylinders?

Цитата Сообщение от Casper-SC Посмотреть сообщение
C++
1
2
3
#pragma once
#include <string>
using namespace std;
как пользователь этого хедера спрашиваю, какого дьявола во всех моих файлах куда я подключаю ваш хедер мне "вываливается" содержимое std ?

Цитата Сообщение от Casper-SC Посмотреть сообщение
C++
1
void SetTradeMark(string name);
почему std::string везде передается по значению?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
16.02.2014, 13:23  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
что за дискриминация GetNumberOfCylinders?
Просто невнимательность, если бы работал с этим кодом дальше, заметил бы и исправил.

Цитата Сообщение от Jupiter Посмотреть сообщение
какого дьявола во всех моих файлах куда я подключаю ваш хедер мне "вываливается" содержимое std ?
Что-то вообще не понял.

Цитата Сообщение от Jupiter Посмотреть сообщение
почему std::string везде передается по значению?
Как его передать по ссылке или указатель на него?

Добавлено через 39 секунд
Я вообще в теме на C# написал пример кода. Потом попросили на С++, я сразу сказал, то что я сказал выше

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
почему std::string везде передается по значению?
А, ну да: char *

Добавлено через 11 минут
Так лучше?
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
#include <iostream>
#include "Lorry.h"
 
using namespace std;
 
void DisplayCarInfo(Car * cars[], int length, char * infoSeparator);
void DisplayCarInfo(Car * car, char * infoSeparator);
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    const int arrayLength = 2;
    Car * cars[arrayLength]  = { new Car("Ford", 330u, 8u), new Lorry("Scania", 750u, 12u, 30000u) } ;
    DisplayCarInfo(cars, arrayLength, "\r\n");
 
    for (int i = 0; i < arrayLength; i++)
        delete cars[i];
 
    system("pause");
    return EXIT_SUCCESS;
}
 
void DisplayCarInfo(Car * cars[], int length, char * infoSeparator)
{
    for (int i = 0; i < length; i++)
    {
        DisplayCarInfo(cars[i], infoSeparator);
    }
}
 
void DisplayCarInfo(Car * car, char * infoSeparator)
{
    cout << "Торговая марка: " << car->GetTradeMark() << " " << "Мощность: " << car->GetEnginePower() << infoSeparator << endl;
}
Добавлено через 2 минуты
И чем плохо передавать строки в методы классов по значению?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.02.2014, 13:36
Цитата Сообщение от Casper-SC Посмотреть сообщение
А, ну да: char *
Добавлено через 11 минут
Так лучше?
нет
Цитата Сообщение от Casper-SC Посмотреть сообщение
Как его передать по ссылке или указатель на него?
по константной ссылке на константу

Цитата Сообщение от Casper-SC Посмотреть сообщение
Что-то вообще не понял.
C++
1
2
3
4
5
//file YourLibraryHeader.h
...
using namespace std;
...
string
C++
1
2
3
4
5
6
7
8
9
10
//file MyClientCode.cpp
#include <YourLibraryHeader.h>
#include "my_string.h"
 
string str; 
/* из-за того что в вашем хедере using namespace std;
* мне в моем файле становится доступен string без указания пространства имен,
* а вас об этот никто не просил, к тому же возможно что у меня есть мой самописный
* string и теперь он конфликтует со стандартным
*/
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
16.02.2014, 13:41  [ТС]
Цитата Сообщение от Casper-SC Посмотреть сообщение
Что-то вообще не понял.
Всё, уже понял. Просто убрал юзинг и везде прописал перед стринг std::

Добавлено через 2 минуты
Цитата Сообщение от Jupiter Посмотреть сообщение
по константной ссылке на константу
Так что ли?
C++
1
2
inline void DisplayCarInfo(Car * cars[], int length, const char * infoSeparator);
inline void DisplayCarInfo(Car * car, const char * infoSeparator);
Тут я ещё inline функции сделал, так как кода в них самый мизер.

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
/* из-за того что в вашем хедере using namespace std;
* мне в моем файле становится доступен string без указания пространства имен,
* а вас об этот никто не просил, к тому же возможно что у меня есть мой самописный
* string и теперь он конфликтует со стандартным
*/
А есть другой более удобный способ? Кроме как:
Цитата Сообщение от Casper-SC Посмотреть сообщение
Просто убрал юзинг и везде прописал перед стринг std::
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.02.2014, 13:53
Цитата Сообщение от Casper-SC Посмотреть сообщение
Так что ли?
ну от string то зачем отказываться const std::string&

Цитата Сообщение от Casper-SC Посмотреть сообщение
А есть другой более удобный способ? Кроме как:
нет, но внутри функций можно
C++
1
2
3
4
5
void foo()
{
    using namespace std;
    string s;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2014, 13:53
Помогаю со студенческими работами здесь

Создать базовый класс Car (машина) и производный класс Lorry (грузовик): ООП ошибки
Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цилиндров, мощностью. Определить методы переназначения...

Создать базовый класс Строка
Вариант 2. Описать базовый класс Строка. Объекты класса должны содержать следующие данные: указатель на сhar, что сохраняет адрес...

Кто поможет описать Базовый класс Строка и производную от Строки класс Битовая Строка
Для Класса строка нужны ещё указатель pChar и Word типа Word где будет хранится длина строки в байтах. Нужно 3 конструктора: без...

Создать иерархию классов, представляющих простое наследование. Базовый класс – строка символов (char *)
. Создать иерархию классов представляющих простое наследование. Базовый класс – строка символов (char *). Производный класс – методы,...

Описать базовый класс Строка и производную от Строка класс Десятичная_строка
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста с заданием. Описать базовый класс Строка. Обязательные поля класса: • поле...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru