2013-03-14 48 views
1

运算符=是否可以重载类指针。本实施例中尝试过载“运算符=”为指针“可爱*”:指针运算符是否可以在C++中重载?

class Cutie  
{ 
public: 
    int Krait; 

    Cutie() : Krait(0) 
    { 
    } 
}; 

Cutie* operator = (Cutie* p, Cutie* q) 
{ 
    if(p == 0) 
    { 
     if(0 < Krait) 
      Krait--; 
    } 
    else 
     Krait++; 
} 

上述确定指标有错误。我在寻找,计数指针赋值一个definiton:

Cutie c; 
Cutie* p = 0; 
p = &c; 

现在的 'p - >金环蛇' 应该是 '1'。

+5

你试过编译它? – 2013-03-14 18:03:14

+0

这有错误。这个试验只是为了澄清这个问题。 – user2029077 2013-03-14 18:04:38

+1

什么错误? – 2013-03-14 18:05:15

回答

5

不,你不能有一个非成员运算符重载函数,只需要指针作为它的参数:

An operator function shall either be a non-static member function or be a non-member function and have at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an enumeration.

+0

因此指针运算符不能被重载,无论它是在类内还是外部定义的? – user2029077 2013-03-14 18:08:50

+0

指针运算符是什么意思?这是赋值操作符。不,你不能为指针重载赋值操作符 - 这会使指针的行为非常糟糕。你希望能在这里做什么? – 2013-03-14 18:10:33

+2

@CutieKrait好的,你不能这样做。但是,您可以提供类似于指针的类型并执行相同的工作。实际上,'std :: shared_ptr'就是这样做的。 – 2013-03-14 18:30:01