返回信息流本人不知道[]运算符怎么重载,忘高手指教:
程序代码为:
#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;
}
本人不胜感激。
这是一条镜像帖。来源:北邮人论坛 / cpp / #16817同步于 2008/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
菜鸟弱问:关于[]和!运算符的重载
xpsuperman
2008/11/28镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
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);
}
}
那你觉得要你自己加一个和[]的重载函数应该怎么添加才能得到所需要的结果呢!构造函数肯定是没错的。就是把x的值赋给i再重新构造一个类指针,希望指教,应该用不到链表的东西就能解决。
【 在 FadeToBlack 的大作中提到: 】
: int& operator[](int j) //你要是想通過a[i]來對某個節點賦值,返回需要為引用
: {
: A *tmp=this;
: ...................
A(int x):i(x) //為何把x的值賦給i了,沒看明白
{
p=new A[x];
}
你這樣初始化之後p->p的值是什麽?當然,如果你要的不是鏈錶就另說了。
operator[]就差不多是我寫的那個樣子。
不過看lz的代碼似乎是想弄個類似鏈錶的東西啊。
那个[]函数加引用是对的,可是运行的时候出问题啊!那个!函数有没有问题啊?这是一个题目,构造函数就是这么写的,我觉得这个问题就是希望加两个重载操作符函数,让函数运行出希望的结果。得出这两个重载操作符函数就行了。
【 在 FadeToBlack 的大作中提到: 】
: A(int x):i(x) //為何把x的值賦給i了,沒看明白
: {
: p=new A[x];
: ...................
好吧,那我就把它當做有冗餘信息的數組了。
頭結點(包括數組長度和指向數組數據數組的指針)
數據數組元素的p沒有用。
這樣的話,operator[]應為
int& operator[](unsigned int index)
{
return (this->p)[index].i;
}
【 在 xpsuperman 的大作中提到: 】
: 那个[]函数加引用是对的,可是运行的时候出问题啊!那个!函数有没有问题啊?这是一个题目,构造函数就是这么写的,我觉得这个问题就是希望加两个重载操作符函数,让函数运行出希望的结果。得出这两个重载操作符函数就行了。
繁体字是怎么做到的?
【 在 FadeToBlack 的大作中提到: 】
: int& operator[](int j) //你要是想通過a[i]來對某個節點賦值,返回需要為引用
: {
: A *tmp=this;
: ...................