在C ++中,重载运算符后,运算符是否会丢失其旧功能?

时间:2012-11-22 01:50:23

标签: c++ class operator-overloading

当我重载它时,运算符是否会失去对之前定义的类型的运算符的能力,或者新的定义仅在我调用时适用

cout << that_specific_class_type_variable

如果我写cout << that_specific_class_type_variabe->Left()它会重载函数还是正常的cout语句?

ostream& operator<< (ostream& out, TreeNode* tptr) 
    {
     if(tptr!=NULL)
     {
      operator<<(out,tptr->Left());
      out<<(*(tptr->Entry()));
      operator<<(out,t->Right());
     }
     return out;
    }

2 个答案:

答案 0 :(得分:2)

它只会更改其重载的特定类型的行为,在您的情况下为TreeNode *。现有版本的运营商将继续正常运作。

对于递归调用:如果LeftRight类型为TreeNode *(或指向从TreeNode派生的类的指针,它将使用运算符的新定义)。如果它们的类型不同,则将使用运算符的默认版本。

我怀疑Entry()会返回与TreeNode *不同类型的对象。在这种情况下,operator<<的标准定义将适用于它。

答案 1 :(得分:1)

运算符重载并不意味着永久地更改该特定运算符的功能和行为,也不意味着更改内置数据类型。 它只是方便您对用户定义的数据类型执行操作,类似于对整数类型执行的操作。

例如,如果你有两个整数变量,你可以像这样分配一个另一个的值。

int a = 5 ;
int b = 7 ;
b = a ;

同样,您可能还希望自己的数据类型的行为类似于高效和易用。

//Hypothetical class
myClass obj1 (5, "abc") ;
myClass obj2 (109, "xyz") ;
.........
......
obj2 = obj1 ;

对于输出,您使用cout运算符重载<<以输出对象的数据。

cout << obj1 ;

如果要输出整数类型中的变量,如果它们是公共成员,则可以这样做。

cout << myVar << endl ;

或者像这样,如果他们是私人会员。

cout << getmyVar() << endl ;