Advertisement
MaratPetrov

Untitled

Feb 2nd, 2023 (edited)
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.64 KB | None | 0 0
  1. //car.h
  2. #pragma once
  3. #include <iostream>
  4. #include <string>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <vector>
  8. using namespace std;
  9.  
  10. namespace{
  11. const char* def_marka = "Renault";
  12. const int def_power = 150;
  13. float const def_price = 15.15;
  14. const int def_displacement = 1830;
  15. }
  16.  
  17. class Car{
  18.     public:
  19.         friend float operator+(const Car& c1, const Car& c2);
  20.     private:
  21.         const char* marka; //марка авто
  22.         int power; //мощность двигателя в кВт
  23.         float cost; //стоимость в тыс. $
  24.         int displacement; //объём двигателя
  25.     public:
  26.         Car& operator= (const Car& newCar);
  27.         operator float () {
  28.         return this->cost;
  29.     }
  30.         void setMarka(const char* m);
  31.         //следующие методы записи возвращают false, чтобы прервать цикл ввода
  32.         bool setPower(int pw); //метод записи мощности
  33.         bool setCost(float p); //метод записи стоимости
  34.         bool setDis(int dis); //метод записи объём двигателя
  35.         std::string getMarka() const { //метод чтения поля марка
  36.             return marka;
  37.         }
  38.         int getPower() const { //метод чтения поля мощность
  39.             return power;
  40.         }
  41.         float getCost() const { //метод чтения поля стоимость
  42.             return cost;
  43.         }
  44.         int getDis() const { //метод чтения поля объём двигателя
  45.             return displacement;
  46.         }
  47.         ~Car();
  48.         Car(const char* m = def_marka, int pw = def_power, float p = def_price, int dis = def_displacement);
  49.         //Car(const char* m, int pw, float p, int dis);
  50.         void Print() const;
  51.         void Input(); //функция ввода параметров, ещё не определена
  52.         };
  53.  
  54. //car.cpp
  55. #include <iostream>
  56. #include "car.h"
  57.  
  58. void Car::setMarka(const char* m){ //метод записи марки
  59.             marka = m;
  60.         }
  61.  
  62. bool Car::setPower(int pw){ //метод записи мощности
  63.             if (pw > 0 ){
  64.             power = pw;
  65.             return false;
  66.             }
  67.             else{
  68.                 return true;
  69.             }
  70.         }
  71.  
  72. bool Car::setCost(float p){ //метод записи стоимости
  73.             if (p > 0 ){
  74.             cost = p;
  75.             return false;
  76.             }
  77.             else{
  78.                 return true;
  79.             }
  80.         }
  81.  
  82. bool Car::setDis(int dis){ //метод записи объём двигателя
  83.             if (dis > 0 ){
  84.             displacement = dis;
  85.             return false;
  86.             }
  87.             else{
  88.                 return true;
  89.             }
  90.         }
  91.  
  92. Car::~Car(){
  93. std::cout << "Destructor called for Car of mark " << getMarka() << std::endl;
  94. }
  95.  
  96. void Car::Print() const{ //вывод параметров на экран
  97.             cout << "Marka is " << getMarka() << endl;
  98.             cout << "Price equals " << getCost() << " thousand $" << endl;
  99.             cout << "Power equals " << getPower() << " kW" << endl;
  100.             cout << "Displacement equals " << getDis() << " cm3" << endl;
  101.         }
  102.  
  103. Car::Car(const char* m, int pw, float p, int dis){
  104.         marka = m;
  105.         power = pw;
  106.         cost = p;
  107.         displacement = dis;
  108. }
  109.  
  110. void Car::Input(){ //функция ввода параметров
  111.         char *marka_ = new char[16];
  112.         std::cout << "Input mark: "; //введите марку авто
  113.         std::cin >> marka_;
  114.         setMarka(marka_);
  115.  
  116.         do{
  117.         std::cout << "Input power (kW): "; //введите мощность авто в кВт
  118.         std::cin >> power;
  119.         } while(setPower(power)); //мощность не может быть неположительной
  120.  
  121.         do{
  122.         std::cout << "Input cost (thousand $): "; //введите стоимости авто в тыс. $
  123.         std::cin >> cost;
  124.         } while(setCost(cost)); //стоимость не может быть неположительной
  125.  
  126.         do{
  127.         std::cout << "Input displacement (cm3): "; //введите объём двигателя в см3
  128.         std::cin >> displacement;
  129.         } while(setDis(displacement)); //объём двигателся не может быть неположительным
  130.         delete marka_;
  131.     };
  132.  
  133. Car& Car::operator= (const Car& newCar)
  134. {
  135.     // do the copy
  136.     //setMarka(new_car.marka);
  137.     //setPower(new_car.power);
  138.     //setCost(new_car.cost);
  139.     //setDis(new_car.displacement);
  140.     marka = newCar.marka;
  141.     power = newCar.power;
  142.     cost = newCar.cost;
  143.     displacement = newCar.displacement;
  144.  
  145.     // return the existing object so we can chain this operator
  146.     return *this;
  147. };
  148.  
  149.  
  150. float operator +(const Car& c1, const Car& c2) {
  151.     return (c1.cost+c2.cost);
  152. }
  153.  
  154.  
  155. //group.h
  156. #include "car.h" //подключение заголовочного файла
  157.  
  158. class Group{
  159.     public:
  160.         int size;
  161.         //Car* array;
  162.         vector <Car> array;
  163.     public:
  164.         //void PutCar(int i, Car& trans);
  165.         void PutCar(Car& trans);
  166.         Car& GetCar(int i){
  167.             //return array[i];
  168.             return array.at(i);
  169.         }
  170.         ~Group();
  171.     public:
  172.         Group(int size){ //конструктор по умолчанию
  173.             size = size;
  174.             //array = new Car[size];
  175.             //std::vector<Car>array;
  176.             //array = vector<Car> array;
  177.         };
  178.         Car& Group::operator[](int i){
  179.             //return array[i];
  180.             return array.at(i);
  181.         }
  182.         operator double (){
  183.         int summ = 0;
  184.         for(int i = 0; i < size; i++){
  185.         //summ += array[i].getCost();
  186.         summ += array.at(i).getCost();
  187.         }
  188.         return summ/size;
  189.         }
  190.         int Size();
  191.         void Print();
  192. };
  193.  
  194.  
  195. //group.cpp
  196. #include <iostream>
  197. #include "group.h"
  198.  
  199. int Group::Size(){
  200.     return size;
  201. };
  202.  
  203. void Group::Print(){
  204.     for (int i = 0; i<size; i++){
  205.         //Car one = array.at(i);
  206.         //array[i].Print();
  207.         //one.Print();
  208.         array.at(1).Print();
  209.     }
  210.     //array[0].Print();
  211. };
  212.  
  213. //void Group::PutCar(int i, Car& trans){
  214. void Group::PutCar(Car& trans){
  215.             //array[i] = trans;
  216.             array.push_back(trans);
  217.             //std::vector<Car> arr;
  218.         }
  219.  
  220. Group::~Group(){
  221.     //delete array;
  222.     array.clear();
  223.     std::cout << "Destructor called for Group of size " << Size() << std::endl;
  224. }
  225.  
  226.  
  227. //main.cpp
  228. #pragma once
  229. #include "group.h" //подключение заголовочного файла
  230.  
  231. int main(){
  232.     //Car* new_car = new Car();
  233.     char marks[3][5] = {"Audi","BMW","Ford"};
  234.     int powers[3] = {100,110,120};
  235.     float costs[3] = {16.5,18,19.2};
  236.     int displaces[3] = {1800,1900,1980};
  237.     Group group(3);
  238.     for (auto i = 0; i < 3; i++){
  239.         Car new_car(marks[i],powers[i],costs[i],displaces[i]);
  240.         //Car new_car(marks[i],powers[i],costs[i],displaces[i]);
  241.         //Car *new_car = new Car(marks[i],powers[i],costs[i],displaces[i]);
  242.         //group.PutCar(i,new_car);
  243.         group.PutCar(new_car);
  244.         //delete new_car;
  245.     }
  246.     //group.Print();
  247.     //group[0].Print();
  248.     //Car test = group[0];
  249.     //test.Print();
  250.     //double price = group.GetCar(0);
  251.     //std::cout << price << endl;
  252.     float sum = group.GetCar(1)+group.GetCar(2);
  253.     cout << sum << endl;
  254.     system("pause");
  255. return 0;
  256. }
Tags: C++
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement