在C++中,重载运算符后,运算符是否会失去其旧功能
In C++, after overloading operator, does the operator lose its old functionality?
当我重载运算符时,它是否会失去为之前定义的类型进行运算符的能力,或者新定义仅在我调用时适用
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 *
.现有版本的运算符将继续正常运行。
对于递归调用:如果 Left
和 Right
的类型为 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 ;
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 在C++中,重载运算符后,运算符是否会失去其旧功能