189 8069 5689

C++程序设计题:利用类设计一个安全一维整数型数组类-创新互联

碰见了一道有趣的题目:

为北仑等地区用户提供了全套网页设计制作服务,及北仑网站建设行业解决方案。主营业务为成都做网站、成都网站制作、北仑网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

数组越界访问是一个难发现且危险性大的事情。利用类设计一个安全一位整数型数组类,该类至少包含三个构造函数:当未指明数组长度时,默认为10元素;也可以按指定元素个数来设定数组等等。当然,在访问数组时应能进行安全识别,同时这一个类还要包含数组间赋值以及数组加运算。最后写出一个主函数来检验他们。

代码如下:
声明:为了能让代码跑起来,写的比较繁琐。笔试中读者能写出伪代码即可,不必照抄。

类的声明:

#includeusing namespace std;


#define default_length 10
//数组默认长度为10

class Array{public:
    Array();
    Array(int size);
    Array(int b[],int len);
    ~Array(){delete[] a;}
    int VisitArray(int n);
    void Add(int b[], int result[],int len);
    void Value(int b[],int len);

    int *a;
    int length;
};

类中函数

函数声明解释
Array()无参构造函数,声明一个数组(10个0元素)
Array(int size)有参构造函数,声明一个数组(size个0元素)
Array(int arr[], int length)有参构造函数,将长度为length的数组b,作为对象的数组。
~Array()析构函数,一个重要的作用是delete掉构造函数中new出的数组
VisitArray(int n)安全访问数组中下标为n的元素。如果越界会返回0,并提示“越界访问”
Add(int b[], int c[], int length)将数组与b数组相加的结果,返回到c数组中。要求三个数组的长度一致。
Value(int b[], int length)b数组赋值到对象的数组中,要求两数组长度一致
Array::Array(){a = new int [default_length];
    if(!a){cout<<"动态空间申请失败"<}
    length = default_length;
    for(int i=0; iif(size<0){cout<<"输入应大于0"<cout<<"动态空间申请失败"<length = len;
    a = new int [length];
    if(!a){cout<<"动态空间申请失败"<if(n<0||n>=length){cout<<"越界访问"<if(length!=len){cout<<"输入的数组长度与本对象的数组长度不符"<if(len!=length){cout<<"输入的数组长度与本对象的数组长度不符"<

用于测试的主函数:

int main()
{int b[3]={1,2,3};
    Array a(b,3);
    int *c= new int[3];
    for(int i=0;i<3;i++)
        c[i]=0;

    //越界访问
    a.VisitArray(3);

    //未越界访问
    int a2=a.VisitArray(2);
    cout<

输出:

越界访问
3
2 4 6
2 4 6


写在最后:
在求数组长度的过程中,C++内并未提供可以直接引用的库函数。
比较普遍的一种方法是sizeof(arr)/sizeof(arr[0]),用整个数组的大小除以单个元素的大小,就是数组内元素个数。
于是我想到,将之封装成一个函数:

int len(int arr[]){return sizeof(arr)/sizeof(arr[0]);
}

正当我沾沾自喜时,发现这个函数返回的结果有误。。。
原来,C++中,将数组作为某个函数的参数传递进去,函数接收的其实是数组的首位地址,也就是一个指针,不再是一个数组。最后自然会算出令人瞠目结舌的数值。
详见此篇:《C++中数组作为函数参数的注意问题》

以及,一维数组类进阶版:《随便写写——C++实现简易整型数组类》

完毕,复习党们继续加油!ヾ(◍°∇°◍)ノ゙祝超常发挥、考出理想的成绩~

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:C++程序设计题:利用类设计一个安全一维整数型数组类-创新互联
本文路径:http://jkwzsj.com/article/cojoic.html