C++ 指针运算符可以在C+中重载吗+;?
类指针是否可以重载运算符C++ 指针运算符可以在C+中重载吗+;?,c++,C++,类指针是否可以重载运算符=。此示例尝试为指针“Cutie*”重载“operator=”: class Cutie { public: int Krait; Cutie() : Krait(0) { } }; Cutie* operator = (Cutie* p, Cutie* q) { if(p == 0) { if(0 < Krait) Krait--; } else
=
。此示例尝试为指针“Cutie*”重载“operator=”:
class Cutie
{
public:
int Krait;
Cutie() : Krait(0)
{
}
};
Cutie* operator = (Cutie* p, Cutie* q)
{
if(p == 0)
{
if(0 < Krait)
Krait--;
}
else
Krait++;
}
现在'p->Krait'应该是'1'。不,不能让非成员重载的运算符函数只使用指针作为其参数: 运算符函数应为非静态成员函数或非成员函数,且至少具有一个类型为类、类引用、枚举或枚举引用的参数
不,您不能让非成员重载运算符函数只接受指针作为其参数: 运算符函数应为非静态成员函数或非成员函数,且至少具有一个类型为类、类引用、枚举或枚举引用的参数
你试过编译它吗?这有错误。此尝试只是为了澄清问题。错误:“Cutie*运算符=(Cutie*,Cutie*)”必须是非静态成员函数您是否尝试过编译它?这有错误。此试验只是为了澄清问题。错误:“Cutie*运算符=(Cutie*,Cutie*)”必须是非静态成员函数,因此指针运算符不能重载,无论它是在类内部还是外部定义的?!你所说的指针运算符是什么意思?这是赋值运算符。不,不能为指针重载赋值运算符-这会使指针的行为非常糟糕。你希望在这里能做什么?@CutieKrait好吧,你不能这么做。但是,您可以提供类似指针的类型,并执行相同的工作。实际上,
std::shared_ptr
就是这样做的。所以指针运算符不能重载,不管它是在类内部还是外部定义的?!你所说的指针运算符是什么意思?这是赋值运算符。不,不能为指针重载赋值运算符-这会使指针的行为非常糟糕。你希望在这里能做什么?@CutieKrait好吧,你不能这么做。但是,您可以提供类似指针的类型,并执行相同的工作。事实上,std::shared_ptr
就是这样做的。
Cutie c;
Cutie* p = 0;
p = &c;