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

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

Войти
Регистрация
Восстановить пароль
 
Casper-SC
Эксперт .NET
3524 / 1743 / 183
Регистрация: 27.03.2010
Сообщений: 4,927
Записей в блоге: 1
#1

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

15.02.2014, 12:45. Просмотров 1184. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2014, 12:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью (C++):

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

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

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

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

Описать базовый класс СТРОКА - C++
Задача. описать класс «Строка», инкапсулирующий в себе данные строки и операций для работы с ними. Создать демонстрационную программу в...

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

5
Jupiter
Каратель
Эксперт С++
6564 / 3985 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.02.2014, 14:14 #2
Цитата Сообщение от 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
Casper-SC
Эксперт .NET
3524 / 1743 / 183
Регистрация: 27.03.2010
Сообщений: 4,927
Записей в блоге: 1
16.02.2014, 13:23  [ТС] #3
Цитата Сообщение от 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
Jupiter
Каратель
Эксперт С++
6564 / 3985 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2014, 13:36 #4
Цитата Сообщение от 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
Casper-SC
Эксперт .NET
3524 / 1743 / 183
Регистрация: 27.03.2010
Сообщений: 4,927
Записей в блоге: 1
16.02.2014, 13:41  [ТС] #5
Цитата Сообщение от 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
Jupiter
Каратель
Эксперт С++
6564 / 3985 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2014, 13:53 #6
Цитата Сообщение от Casper-SC Посмотреть сообщение
Так что ли?
ну от string то зачем отказываться const std::string&

Цитата Сообщение от Casper-SC Посмотреть сообщение
А есть другой более удобный способ? Кроме как:
нет, но внутри функций можно
C++
1
2
3
4
5
void foo()
{
    using namespace std;
    string s;
}
1
16.02.2014, 13:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2014, 13:53
Привет! Вот еще темы с ответами:

Создать базовый класс - Array и производный класс - Money для работы денежной суммы - C++
ПОМОГИТЕ, ПОЖАЛУЙСТА, С ЗАДАЧЕЙ Создать базовый класс - Array и производный класс - Money для работы денежной суммы

Создать базовый класс Triad и производный класс vector3D - C++
Помогите пожалуйста с заданием. Часть кода(vector3D) сделал, вроде работает Нужно помочь с классом Triad. Вот полное задание: ...

Создать базовый класс Тройка_чисел (Triad) и производный класс Time с полями часы, минуты и секунды - C++
Наследование. Виртуальныефункции.Полиморфизм. 1. Цельзадания: 1) Создание консольного приложения, состоящего и - Базовый класс:...

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


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

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

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