c++ - 在 cpp 中的一元运算符重载中,如何确定我们需要在对象的哪一侧放置运算符符号?
问题描述
定义函数->
car operator *()
{
car temp;
temp.a = a*3;
temp.b = b*3;
return temp;
}
在下面给出的代码中,如何确定 * 是在 o2 之前还是在 o2 之后。
car o3=*o2 //o2 is also an object of same class and has some values for a and b
解决方案
只有一个一元运算符可以出现在对象的任一侧。它通过提供两个重载来消除歧义:一个只接受一个参数,另一个接受一个int
作为第二个参数。编译器知道这一点,并适当地调用它:
struct S {
S& operator++(); // pre-increment
S operator++(int); // post-increment
};
S s;
++s; // calls S::operator++()
s++; // calls S::operator++(int)
是的,那个额外的论点是一种技巧。不,你不能用它的价值做任何有意义的事情。
所有其他可以重载的一元运算符都出现在与非重载版本相同的位置。如果运算符位于非重载上下文中的对象前面(例如,*ptr),那么它位于重载上下文中的对象前面(例如,*my_object)。如果它来了,它就会来。
推荐阅读
- css - 如何在不使用 z-index 的情况下隐藏另一个项目下的项目
- laravel - 类 Database\Seeds\PermissionsTableSeeder 不存在
- php - 如何从 laravel 5 中的两个相关表中获取数据
- c# - 找不到注册视图模型
- node.js - 节点usb,没有收到数据
- intellij-idea - 如何在 IntelliJ 中重命名我的整个项目而无需太多手动步骤?
- django - RUN pip install -r requirements.txt 不会在 docker 容器中安装要求
- python - 如何修复此代码的“无效语法”错误
- cmake - 共享对象库未列出特定的共享对象依赖项
- docker - 即使完全停止 Docker 服务,Docker 容器仍在运行