C++下标重载问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 18:37:13
哪位高手能帮一下,因为C++里没有对下标超界检查,而程序里虽然提示下标超界可它依然会算下去

#include<iostream.h>
#include<iomanip.h>

static const int rows=2;
static const int cols=2;
class Matrix{
private:
int a[rows][cols];
public:
static int count;
Matrix(int(*p)[cols]);
~Matrix();
Matrix operator-();
Matrix operator+(Matrix &);
Matrix operator++();
Matrix operator++(int);
friend ostream &operator <<(ostream &os,Matrix &);
friend istream &operator >>(istream &is,Matrix &);
void print();
};
class Deno{
int vector[5];
int index;
public:
Deno(int);
int &operator[](int i);
};
int Matrix::count=0;
void Matrix::print(){
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
cout<<setw(3)<<(*this).a[i][j];
cout<<endl;
}
Matrix::Matrix(int (*p)[cols]){
for(int i=0;i<rows;i++)

不明白你的意思,是不是这样
#include <stdlib.h>

if (i>XX){
cout<<"下标越界";
exit(0);
}

int &Deno::operator [](int i){
static int n=0;
assert(i>=0 && i<index);
return vector[i];
}
不知道你要的是不是这个功能
只有在运行时才能检测下标是否越界,编译时无法检测

比如
#if 1 //#if后面只能是宏常量不能是变量或const常量
#error ghrjnh
#endif

编译器生成的代码不做越界检查,因为这有额外的性能损失,越界检查都是程序员自己做的。