BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #16817同步于 2008/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

菜鸟弱问:关于[]和!运算符的重载

xpsuperman
2008/11/28镜像同步6 回复
本人不知道[]运算符怎么重载,忘高手指教: 程序代码为: #include <iostream> using namespace std; class A { int i; A* p; public: A():p(NULL) { } A(int x):i(x) { p=new A[x]; } int operator[](int j) { //??? } int operator!() { return this->i; } }; int main() { A a(5); for(int i=0;i<5;i++) { a[i]=i; cout<<a[i];//输出01234 } system("PAUSE"); return 0; } 本人不胜感激。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
FadeToBlack机器人#1 · 2008/11/28
int& operator[](int j) //你要是想通過a[i]來對某個節點賦值,返回需要為引用 { A *tmp=this; for (int i = 0; i != j; ++i) { tmp = tmp->p; } return tmp->i; } 去看一下C++ Primer吧,上面有詳細說明。 --------------------------------------------- Errrrrr... 如果是一維鏈錶的話,你這樣初始化除了開頭節點的指針,後續節點指針都未初始化啊。 A(int x):i(x) //為何把x的值賦給i了,沒看明白 { p=new A[x]; } 如果是鏈錶的話: A(int x) { if (x == 1) { p = NULL; } else { i = 0; p = new A(x-1); } }
xpsuperman机器人#2 · 2008/11/28
那你觉得要你自己加一个和[]的重载函数应该怎么添加才能得到所需要的结果呢!构造函数肯定是没错的。就是把x的值赋给i再重新构造一个类指针,希望指教,应该用不到链表的东西就能解决。 【 在 FadeToBlack 的大作中提到: 】 : int& operator[](int j) //你要是想通過a[i]來對某個節點賦值,返回需要為引用 : { : A *tmp=this; : ...................
FadeToBlack机器人#3 · 2008/11/28
A(int x):i(x) //為何把x的值賦給i了,沒看明白 { p=new A[x]; } 你這樣初始化之後p->p的值是什麽?當然,如果你要的不是鏈錶就另說了。 operator[]就差不多是我寫的那個樣子。 不過看lz的代碼似乎是想弄個類似鏈錶的東西啊。
xpsuperman机器人#4 · 2008/11/28
那个[]函数加引用是对的,可是运行的时候出问题啊!那个!函数有没有问题啊?这是一个题目,构造函数就是这么写的,我觉得这个问题就是希望加两个重载操作符函数,让函数运行出希望的结果。得出这两个重载操作符函数就行了。 【 在 FadeToBlack 的大作中提到: 】 : A(int x):i(x) //為何把x的值賦給i了,沒看明白 : { : p=new A[x]; : ...................
FadeToBlack机器人#5 · 2008/11/29
好吧,那我就把它當做有冗餘信息的數組了。 頭結點(包括數組長度和指向數組數據數組的指針) 數據數組元素的p沒有用。 這樣的話,operator[]應為 int& operator[](unsigned int index) { return (this->p)[index].i; } 【 在 xpsuperman 的大作中提到: 】 : 那个[]函数加引用是对的,可是运行的时候出问题啊!那个!函数有没有问题啊?这是一个题目,构造函数就是这么写的,我觉得这个问题就是希望加两个重载操作符函数,让函数运行出希望的结果。得出这两个重载操作符函数就行了。
bupteinstein机器人#6 · 2008/12/3
繁体字是怎么做到的? 【 在 FadeToBlack 的大作中提到: 】 : int& operator[](int j) //你要是想通過a[i]來對某個節點賦值,返回需要為引用 : { : A *tmp=this; : ...................