c++下标运算符

各们C++高手,请您们帮帮小弟好吗?
下面的程序有几处地方,小弟实在弄不明白

#include<iostream.h>
#include<stdlib.h>
class array{
int*p;
int size;
public:
array(int i=10){p=new int[i]; size=i;}
~array(){delete []p;}
int getsize() const{return size;} \\\\\\\\\A\\\\\\\\
int& operator[](int index);
};
int& array::operator[](int index) \\\\\\\B\\\\\\\\
{ if(index>=0&&index<size) return p[index];
else{cout<<"\n出错:下标"<<index<<"越界!\n"; exit(2);}
}
void main()
{array a(10); \\\\\\\\\\\\\C\\\\\\\\\\\\\\\\
for(int i=0;i<10;i++) a[i]=i;
for(i=1;i<11;i++)
cout<<a[i]<<' ';
}

请问A处的句子有什么作用,把它去掉不行吗?
B处的句子这个形式是什么意思?
C处句子为什么要用ARRAY a(10)的形式,它是与什么句子对应的?
为什么不是用 ARRAY operator{}的形式
万分感谢
楼下说

for(int i=0;i<10;i++) a[i]=i;
for(i=1;i<11;i++) //这里就可以看出operator[]函数的作用了
cout<<a[i]<<' ';

但我比较了上面的句子与

int& array::operator[](int index) \\\\\\\B\\\\\\\\
{ if(index>=0&&index<size) return p[index];
else{cout<<"\n出错:下标"<<index<<"越界!\n"; exit(2);}

实在找不到有什么连系,
请各们高手能否解释一下呢?
小弟想了很久都搞不懂,心里好着急,
万分感谢

还有在以上句子中"exit(2);"是什么意思?
谢谢

以下是C++编程语言中的所有运算符的优先级和结合性列表。

优先级运算符叙述示例重载性结合性1::作用域解析(C++专有)Class::age = 2;否由左至右2++后缀递增i++ --后缀递减i-- {}组合{i++;a*=i;} ()函数调用或变量初始化c_tor(int x, int y) : _x(x), _y(y * 10) {} []数组访问array[4] = 2; .以对象方式访问成员obj.age = 34;否->以指针方式访问成员ptr->age = 34; dynamic_cast运行时检查类型转换(C++专有)Y& y = dynamic_cast<Y&>(x);否static_cast未经检查的类型转换(C++专有)Y& y = static_cast<Y&>(x);否reinterpret_cast重定义类型转换(C++专有)int const* p = reinterpret_cast<int const*>(0x1234);否const_cast更改非常量属性(C++专有)int* q = const_cast<int*>(p);否typeid获取类型信息(C++专有)std::type_info const& t = typeid(x);否3++前缀递增++i 由右至左--前缀递减--i +一元正号int i = +1; -一元负号int i = -1; !
not逻辑非
!的备用拼写if (!done) … ~
compl按位取反
~的备用拼写flag1 = ~flag2; (type)强制类型转换int i = (int)floatNum; *取指针指向的值int data = *intPtr; &取变量的地址int *intPtr = &data; sizeof某某的大小size_t s = sizeof(int);否new动态内存分配(C++专有)long* pVar = new long; new[]动态数组内存分配(C++专有)long* array = new long[20]; delete动态内存释放(C++专有)delete pVar; delete[]动态数组内存释放(C++专有)delete [] array; 4.*成员对象选择(C++专有)obj.*var = 24;否由左至右->*成员指针选择(C++专有)ptr->*var = 24; 5*乘法int i = 2 * 4; /除法float f = 10.0 / 3.0; %模数(取余)int rem = 4 % 3; 6+加法int i = 2 + 3; -减法int i = 5 - 1; 7<<比特左移int flags = 33 << 1; >>比特右移int flags = 33 >> 1; 8<小于关系if (i < 42) … <=小于等于关系if (i <= 42) ... >大于关系if (i > 42) … >=大于等于关系if (i >= 42) ... 9==
eq等于关系
==的备用拼写if (i == 42) ... !=
not_eq不等于关系
!=的备用拼写if (i != 42) … 10&
bitand比特 AND
&的备用拼写flag1 = flag2 & 42; 11^
xor比特 XOR(独占or)
^的备用拼写flag1 = flag2 ^ 42; 12|
bitor比特 OR(包含or)
|的备用拼写flag1 = flag2 | 42; 13&&
and逻辑 AND
&&的备用拼写if (conditionA && conditionB) … 14||
or逻辑 OR
||的备用拼写if (conditionA || conditionB) ... 15c?t:f三元条件运算int i = a > b ? a : b;否由右至左16=直接赋值int a = b; +=以和赋值a += 3; -=以差赋值b -= 4; *=以乘赋值a *= 5; /=以除赋值a /= 2; %=以取余数赋值a %= 3; <<=以比特左移赋值flags <<= 2; >>=以比特右移赋值flags >>= 2; &=
and_eq以比特AND赋值
&=的备用拼写flags &= new_flags; ^=
xor_eq以比特XOR赋值
^=的备用拼写flags ^= new_flags; |=
or_eq以比特OR赋值
|=的备用拼写flags |= new_flags; 17throw抛出异常throw EClass(“Message”);否18,逗号运算符for (i = 0, j = 0; i < 10; i++, j++) … 由左至右
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-02-29
array(int i=10){p=new int[i]; size=i;} //这个就是你的程序的构造函数了.构造函数没有返回类型,函数名与类类型同名.
~array()//这个是析构函数,
********************************
exit(2);是终止程序的意思.
第2个回答  推荐于2016-03-05
#include<iostream.h>
#include<stdlib.h>
//array是一个类,有getsize、operator[]等成员函数,注意是一个int型的数组!
class array{
int*p;
int size;
public:
array(int i=10){p=new int[i]; size=i;}
~array(){delete []p;}
int getsize() const{return size;} //如果你没用这个功能可以去掉。这是取得数组维数的。
int& operator[](int index);
};

int& array::operator[](int index) //这是在类的外面来定义上面声明的operator[]函数。
{ if(index>=0&&index<size) return p[index];
else{cout<<"\n出错:下标"<<index<<"越界!\n"; exit(2);}
}
void main()
{array a(10); //这是调用了你在类中的构造函数啊!!这样就可以构造一个对象!!
for(int i=0;i<10;i++) a[i]=i;
for(i=1;i<11;i++) //这里就可以看出operator[]函数的作用了
cout<<a[i]<<' ';
}
//operator是操作符重载,通俗点说就是你可以用[]符号来定义自己的功能。[]放一个型参。
//而operator=就要放2个型参了,因为=为2元参作符。本回答被提问者采纳
第3个回答  2008-02-28
operator是操作符重载。你去网上找资料看吧。
相似回答