首页 > 解决方案 > 复制构造函数弄乱了重载的输出运算符

问题描述

我制作了一个包含两个类的程序。在第一个 CAuto 上,我重载了 << 以输出 CAuto 数据。

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;
}

如果我删除复制构造函数,我可以获得正确的输出。如何在不删除复制构造函数的情况下仍然从 CAvtopark 对象获取 CAuto 输出?

标签: c++constructorruntimeoperator-keyword

解决方案


推荐阅读