c++ - 复制构造函数弄乱了重载的输出运算符
问题描述
我制作了一个包含两个类的程序。在第一个 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 - 在C中将每个其他元素从一个数组添加到另一个数组
- python - 如何将 django 与其他服务器的 sql server 数据库一起使用?
- python - 在 5 天内找到 2 个变量之间的相关性
- c - 斐波那契数列递归函数的基本情况
- informatica - Powercenter 10x“错误:无法中止或重新启动会话”
- list - Scala代码替换列表形式的数据框中列的空值
- iis - 在域级别从客户端 (<) 检测到有潜在危险的 Request.Path 值
- javascript - Google Apps 脚本无法识别我文档中的表格
- python - mysql.connector.errors.IntegrityError: 1062 (23000): 重复条目
- perl - perl 生锈。如何读取数据文件,然后在找到特定字符串时替换该文件中的整行