1

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

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;
    }
4

2 回答 2

2

它只会改变它重载的特定类型的行为,在你的情况下,TreeNode *. 现有版本的操作员将继续正常运行。

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

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

于 2012-11-22T01:51:36.767 回答
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 ;
于 2012-11-22T01:53:26.900 回答