#include <iostream>
using namespace std;
class Sales_Item
{
public:
//构造函数
Sales_Item() : units_sold(0), revenue(0.0)
{
cout << "构造函数" << endl;
}
//构造函数
Sales_Item(const std::string &book) : isbn(book), units_sold(0), revenue(0.0)
{
cout << "构造函数" << endl;
}
//拷贝构造函数
Sales_Item(const Sales_Item& cp) : isbn(cp.isbn), units_sold(cp.units_sold), revenue(cp.revenue)
{
cout << "拷贝构造函数" << endl;
}
//赋值操作符重载
Sales_Item& operator= (const Sales_Item&)
{
cout << "赋值操作符重载" << endl;
return *this;
}
//析构函数
~Sales_Item()
{
cout << "析构函数" << endl;
}
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
//传入参数的时候因为是传对象,所以传值的时候会调用拷贝构造函数, 构造对象it
Sales_Item foo(Sales_Item it)
{
Sales_Item tmp = it; //调用拷贝构造函数, 构造对象tmp
return tmp; //返回对象,传递对象 调用拷贝构造函数 -- 随后调用析构函数 it会析构,tmp也将析构
}
int main()
{
Sales_Item ab; //在这里会调用 构造函数
ab = foo(ab); //操作符重载 = 调用, 调用完之后临时对象(函数返回值)被析构
return 0; //ab析构
}