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

In C++, after overloading operator, does the operator lose its old functionality?

本文关键字:运算符 失去 功能 C++ 重载 是否      更新时间:2023-10-16

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

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

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

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

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

运算符

重载并不意味着永久更改该特定运算符的功能和行为或内置数据类型。它仅有助于对用户定义的数据类型执行类似于对整型执行的操作。

例如,如果您有两个整数变量,则可以像这样为其中一个变量分配另一个变量的值。

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 ;