C++:重载"pointer to object" * 运算符
C++: overloading "pointer to object" * operator
我对默认操作符定义(由编译器)有一些误解。
我有小班:
class Q
{
public:
Q() {};
Q(int i) { x = i; };
~Q() {};
void print() { cout << x << endl; };
Q& operator * ()
{
cout << "operator *n";
return *this;
};
const Q& operator * () const
{
cout << "operator *n";
return *this;
};
private:
int x;
};
我正在做这个:
int main()
{
Q* obj_p = new Q(1);
Q obj = *obj_p;
obj.print();
return 0;
}
我期望在1
之前看到operator *
。但是我只看到了print()
方法的结果。
这是什么意思?我不需要重载operator *
-这是编译器的工作,或者我做重载是错误的?
谢谢。
obj_p
是一个指针。您没有重载(无论如何也不能重载)指针的解引用操作符。要调用重载,需要对实例进行操作:
Q obj;
*obj;
没有调用用户定义的操作符——obj_p
是指针,而不是对象,因此调用内置的解引用操作符。
要完成juanchopanza的回答,您可以在指针上调用操作符,如下所示:
Q* obj_p = new Q(1);
Q obj = obj_p->operator*();
你在Q指针上使用'*'操作符,但你应该在Q对象上使用。如果您尝试*(*obj_p),您将看到。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- object = -object 不编译,尽管运算符重载
- 重载运算符C++:Object=Object*Object
- 如何重载运算符[]以允许`object[a]=b`
- C++:重载"pointer to object" * 运算符