C++的一道难题 求解释 关于重载运算符的,该如何解决
C++的一道难题 求解释 关于重载运算符的
=、()、[]、->、*
这几个运算符 为什么只能重载为非静态成员函数,为什么不能重载为全局函数或者友元函数?
如果推而广之,只能重载为非静态成员函数的运算符,本身有什么“规律”?
——我所知道的规律之一是,运算符左侧必须是对象。
但这并非铁律
我感觉+=也符合上面的规律:左侧必须是对象
分不多,技术交流吧
------解决方案--------------------
C++标准在本论坛就有下载。自己下了看吧。
有很多东西,就是一个“规定”而已,如果当初规定为另外一种形式,也是完全可以的。
------解决方案--------------------
=、()、[]、->、*
这几个运算符 为什么只能重载为非静态成员函数,为什么不能重载为全局函数或者友元函数?
如果推而广之,只能重载为非静态成员函数的运算符,本身有什么“规律”?
——我所知道的规律之一是,运算符左侧必须是对象。
但这并非铁律
我感觉+=也符合上面的规律:左侧必须是对象
分不多,技术交流吧
------解决方案--------------------
C++标准在本论坛就有下载。自己下了看吧。
有很多东西,就是一个“规定”而已,如果当初规定为另外一种形式,也是完全可以的。
------解决方案--------------------
- C/C++ code
#include <iostream> #include <string.h> using namespace std; class String { public: String():thesize(0),pc(NULL){} String(char *p) { thesize = strlen(p); pc = new char[thesize+1]; strcpy(pc,p); pc[thesize] = '\0'; } char operator [](int i) { return pc[i]; } ~String() { if(NULL != pc) delete [] pc; } private: int thesize; char *pc; }; int main() { char *p = "hello!!!"; String ms(p); cout << ms[5] << endl; return 0; }