Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针运算符可以在C+中重载吗+;?_C++ - Fatal编程技术网

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;