我重载了运算符"="来做某事,但它反而使用构造函数
class Date
{public:
int x;
public:
Date(int v1)
{
x = v1+1;
}
Date& operator=(Date& d)
{
x = x - 1;
}
public:
~Date() {};
};
int main()
{
Date d = 1;
cout << d.x;
//delete d;
return 0;
}
我本来希望打印 0,但它打印的是 2(使用构造函数(。为什么?还有为什么它不让我删除 d?它说它必须是指向完整对象类型的指针。
它应该得到优先级,因为这
Date d = 1;
不是赋值,而是带有初始化的对象声明。C++ 中类对象的初始化是构造函数的域。不要让语法(使用 = 1
作为初始值设定项(混淆您。
若要调用赋值运算符,左侧必须是已发生初始化的现有对象。赋值仅适用于预先存在的对象。因此,如果您添加如下语句:
d = 1;
它可以按预期调用赋值运算符(在修复其他一些错误之后(。
还有为什么它不让我删除d?它说它必须是指向完整对象类型的指针。
这个错误对我来说似乎是不言自明的。只能在指针操作数上调用 delete。并且指针必须指向以前使用 new
创建的对象。