Конструктор копирования портит перегруженный оператор вывода - PullRequest
0 голосов
/ 05 апреля 2020

Я сделал программу с двумя классами. На первом CAuto я перегрузил << для вывода данных CAuto. </p>

class CAuto
{
private:
    string license_plate,maker,color;
    int year, run;
public:
    CAuto() {}
    CAuto(string get_plate, string get_maker, string get_color, int get_year, int get_run) //ekpliciten construktor
    {
        license_plate = get_plate;
        maker = get_maker;
        color = get_color;
        year = get_year;
        run = get_run;
    }
    friend ostream& operator <<(ostream& out, const CAuto& obj)
    {
        out << "License: " << obj.license_plate << "\nMaker: " << obj.maker << "\nYear: " << obj.year << "\nColor: " << obj.color << "\nRun: " << obj.run;
        return out;
    }
    void operator =(const CAuto& obj) //operator za prisvoqvane
    {
        license_plate = obj.license_plate;
        maker = obj.maker;
        color = obj.color;
        year = obj.year;
        run = obj.run;
    }
};

Мой второй класс CAvtopark содержит 1 переменную CAuto, и я хотел иметь возможность выводить весь объект CAvtopark. Мой класс CAvtopark имеет конструктор копирования, и я заметил, что при его включении вывод CAvtopark не работает в том смысле, что он не может получить данные CAuto. Почему это так?

class CAvtopark
{
private:
    CAuto car;
    string name,chain;
    int autopark_count, sales;
public:
    CAvtopark(CAuto get_car, string get_name, string get_chain, int get_autopark_count, int get_sales)
    {
        car = get_car;
        name = get_name;
        chain = get_chain;
        autopark_count = get_autopark_count;
        sales = get_sales;
    }
    CAvtopark(const CAvtopark& obj1)
    {
        name = obj1.name;
        chain = obj1.chain;
        autopark_count = obj1.autopark_count;
        sales = obj1.sales;
    }
    friend ostream& operator <<(ostream& out, const CAvtopark& obj)
    {
        out << "\nAvtopark name: " << obj.name << "\nAvtopark chain: " << obj.chain << "\nAvtopark count: " << obj.autopark_count << "\nAvtopark sales: " << obj.sales;
        out << endl << obj.car;
        return out;
    }
};

int main()
{
    //creating different cars
    CAuto car1("8421841", "lada", "yellow", 1999, 50000);
    //creating CAvtopark objects
    CAvtopark park1(car1, "avtopark1", "veriga1", 5, 30);
    vector<CAvtopark> parkove{ park1 }; 
    cout << parkove[0];
    return 0;
}

Если я удаляю конструктор копирования, я могу получить правильный вывод. Как я могу получить вывод CAuto из объекта CAvtopark, не удаляя конструктор копирования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...