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

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

Восстановить пароль Регистрация
 
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
15.02.2014, 12:45     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью #1
Создать базовый класс 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 минут
Чуть поправил один момент
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2014, 12:45     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью
Посмотрите здесь:

C++ Создать абстрактный базовый класс Vehicle
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема C++
C++ Создать абстрактный базовый класс
C++ Создать базовый класс список
C++ Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.02.2014, 14:14     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью #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 везде передается по значению?
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
16.02.2014, 13:23  [ТС]     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью #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 минуты
И чем плохо передавать строки в методы классов по значению?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2014, 13:36     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью #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 и теперь он конфликтует со стандартным
*/
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
16.02.2014, 13:41  [ТС]     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью #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::
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2014, 13:53     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью #6
Цитата Сообщение от Casper-SC Посмотреть сообщение
Так что ли?
ну от string то зачем отказываться const std::string&

Цитата Сообщение от Casper-SC Посмотреть сообщение
А есть другой более удобный способ? Кроме как:
нет, но внутри функций можно
C++
1
2
3
4
5
void foo()
{
    using namespace std;
    string s;
}
Yandex
Объявления
16.02.2014, 13:53     Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цылиндров, мощностью
Ответ Создать тему
Опции темы

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