C++的一道难题 求解释 关于重载运算符的
=、()、[]、->、*
这几个运算符 为什么只能重载为非静态成员函数,为什么不能重载为全局函数或者友元函数?
如果推而广之,只能重载为非静态成员函数的运算符,本身有什么“规律”?
——我所知道的规律之一是,运算符左侧必须是对象。
但这并非铁律
我感觉+=也符合上面的规律:左侧必须是对象
分不多,技术交流吧
[解决办法]
C++标准在本论坛就有下载。自己下了看吧。
有很多东西,就是一个“规定”而已,如果当初规定为另外一种形式,也是完全可以的。
[解决办法]
#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;
}
vector string ==凡是类内部含有指针,并且分配连续的内存空间的情况下都可以重载[]为成员函数