《C++语言基础》实践参考——我的数组类

返回:贺老师课程教学链接

【项目2-我的数组类】
下面的程序,因为存在指针类型的数据成员,需要能完成深复制的构造函数。请补充完整构造函数和析构函数(其他不必动)。其中,构造函数要完成下面三个任务:
(1)为各成员函数赋值,按照深复制原则,其中arrayAddr应该是为保存数据新分配的连续空间的首地址;
(2)MyArray(int *a, int n)中,要将a指向的数组中的数值,逐个地复制到新分配的arrayAddr指向的空间中;
(3)getMax( )函数采取的策略是直接返回max(所以,计算max的工作,由构造函数完成)

#include<iostream>
using namespace std;
class MyArray
{
private:
    int *arrayAddr; //保存一个有len个整型元素的数组的首地址
    int len;       //记录动态数组的长度
    int max;       //动态数组中的最大值(并非动态数组中必须要的数据成员)
public:
    MyArray(int *a, int n);
    ~MyArray();
    int getValue(int i);   //获得数组中下标为i的元素的值
    int getLen();          //返回数组长度
    int getMax( );         //返回数组中的最大值
};
int MyArray::getValue(int i){   //获得数组中下标为i的元素的值
    return arrayAddr[i];
}
int MyArray::getLen(){   //返回数组长度
    return len;
}
int MyArray::getMax( ) {  //返回数组中的最大值
    return max;
}
int main(){
    int b[10]= {75, 99, 90, 93, 38, 15, 5, 7, 52, 4};
    MyArray r1(b,10);
    cout<<"最大值:"<<r1.getMax()<<endl;
    int c[15] = {18,68,10,52,3,19,12,100,56,96,95,97,1,4,93};
    MyArray r2(c,15);
    int i,s=0;
    for(i=0; i<r2.getLen(); i++)
        s+=r2.getValue(i);
    cout<<"所有元素的和为:"<<s<<endl;
    return 0;
}

[参考解答]

#include<iostream>
using namespace std;
class MyArray
{
private:
    int *arrayAddr; //保存一个有len个整型元素的数组的首地址
    int len;       //记录动态数组的长度
    int max;       //动态数组中的最大值(并非动态数组中必须要的数据成员)
public:
    MyArray(int *a, int n);
    ~MyArray();
    int getValue(int i);   //获得数组中下标为i的元素的值
    int getLen();          //返回数组长度
    int getMax( );         //返回数组中的最大值
};

//定义构造函数,构造函数要完成下面三个任务:
//(1)为各成员函数赋值,其中arrayAddr应该是为保存数据新分配的连续空间的首地址;
//(2)将a指向的数组中的数值,逐个地复制到新分配的空间中
//(3)getMax( )函数采取的策略是直接返回max,计算max的工作,由构造函数完成
MyArray::MyArray(int *a, int n)
{
    len=n;
    arrayAddr=new int[n];
    max=a[0];
    for(int i=0; i<n; i++)
    {
        arrayAddr[i]=a[i];
        if (max<a[i]) max=a[i];
    }
}
//析构函数的类外定义,释放指针型数据a所指向的空间
MyArray::~MyArray()
{
    delete [] arrayAddr;
}

int MyArray::getValue(int i){   //获得数组中下标为i的元素的值
    return arrayAddr[i];
}
int MyArray::getLen(){   //返回数组长度
    return len;
}
int MyArray::getMax( ) {  //返回数组中的最大值
    return max;
}
int main(){
    int b[10]= {75, 99, 90, 93, 38, 15, 5, 7, 52, 4};
    MyArray r1(b,10);
    cout<<"最大值:"<<r1.getMax()<<endl;
    int c[15] = {18,68,10,52,3,19,12,100,56,96,95,97,1,4,93};
    MyArray r2(c,15);
    int i,s=0;
    for(i=0; i<r2.getLen(); i++)
        s+=r2.getValue(i);
    cout<<"所有元素的和为:"<<s<<endl;
    return 0;
}
时间: 2024-08-02 10:48:06

《C++语言基础》实践参考——我的数组类的相关文章

《C语言及程序设计》实践参考——二维数组当函数参数

返回:贺老师课程教学链接 [项目1-二维数组当函数参数]定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: int sum(int array[ ][4],int m,int n); //该函数完成对array数组中的前m行和n列元素求和 在以下程序的基础上,完成对sum函数的定义. #include <stdio.h> int sum(int array[ ][4],int m,int n);//该函数完成对array数组中的前m行和n列元素求和 int main() { int

《C语言及程序设计》实践参考——为动态数组扩容

返回:贺老师课程教学链接 [项目3-为动态数组扩容]下面的程序,利用动态数组保存学生的成绩.当再有一批学生成绩需要保存时,要为之扩容(和吃自助一样,用多少,取多少,这好),请补充完整下面的程序,实现如图所示的功能. #include <stdio.h> #include <malloc.h> int main( ) { int num,i,addNum; //num是小组人数 printf("输入学生人数: "); scanf("%d", &

《C++语言基础》实践参考——我的向量类

返回:贺老师课程教学链接 项目要求 [项目4-我的向量类] 建立一个向量类MyVector,声明如下,请完成类的定义 class MyVector //定义向量类 { public: MyVector(int m); //构造函数,共有m个元素的向量,元素值预置为0 MyVector(const MyVector &v); //复制构造函数 ~MyVector(); //析构函数:释放动态数组所占用的存储空间 friend istream &operator>>(istream

《C++语言基础》实践参考——方程也是类

返回:贺老师课程教学链接 项目要求 [项目5-方程也是类]设计一元一次方程类,求形如ax+b=0的方程的解.例如:输入3x-8=0时,输出的方程的解为x=2.66667:再如:输入5s+18=0时,输出的方程的解为s=-3.6: 参考界面如下:参考代码为: class CEquation { private: double a; // 未知数系数 double b; // 常数项 char unknown; // 代表未知数的符号 public: CEquation(double aa=0,do

《C++语言基础》参考——学生可以相加吗?

返回:贺老师课程教学链接 谈及运算,我们总是习惯"数"的运算.而实际上,像时间之类的对象也是可以进行加减运算的.再进一步,我们的思维还可以拓展,运算加以加到任何事物上,只要我们可以为这些"运算"设计好意义. 例如:有班级类和学生类.两个学生相加,组成了一个由两个学生构成的班级:班级加学生,代表班级增加了一名新同学:学生乘学生,结果为这两个学生"结对子",可以做某些事(这个对子,需要定义成一个新的类):班级乘班级,是班级中的所有学生,两两结对子的所

C语言程序设计实践(OJ)-数组初步

2000: 数组逆序 Description 输入10个整数存入一维数组,按逆序重新存放后再输出. Input 输入包括一行.10个以空格隔开的整数. Output 逆序的10个整数,整数以空格隔开. Sample Input 1 3 5 9 7 6 8 2 4 0 Sample Output 0 4 2 8 6 7 9 5 3 1 提示:将有一个格式错误让你崩溃,试一试,实在想不到时到课程主页里看锦囊. 参考解答 1045:插入有序数组中 Description 已有一个已排好的9个元素的数组

C++实践参考——用对象数组操作长方柱类

返回:贺老师课程教学链接 [项目3-用对象数组操作长方柱类]编写基于对象的程序,求5个长方柱的体积和表面积.长方柱类Bulk的数据成员包括长(length).宽(width).高(heigth)等.对照已经给出的代码,要做的工作及要求有: 需要你定义长方柱类,代码中已经给出由5个长方柱对象构成的对象数组b: B数组中的前3个对象b[0].b[1].b[2]直接参数初始了,需要定义构造函数,而初始化中,各对象提供的参数数目不同,需要有默认参数的构造函数(未给出的参数默认为1.0) 第4个对象b[3

《C++语言基础》参考——转换构造函数与类型转换函数

返回:贺老师课程教学链接 下面的程序,想在main函数中要完成实数加复数.复数加实数,不可以.编译下面的程序出现错误,就是因为没有提供对应类型数据的运算符重载函数. #include <iostream> using namespace std; class Complex { public: Complex():real(0), imag(0){} Complex(double r,double i):real(r), imag(i){} Complex operator+(const Co

C++实践参考:IP地址类

[项目-IP地址类] 在互联网中使用的IP地址占4字节,可以用四段法表示,每段值的范围为0-255,中间用"."隔开,例如202.194.116.97.其实,也可以看看一个有4字节的无符号整型值3401741409. 现设计一个IP地址类,用于保存IP地址,并实施在IP地址上的一些操作.如下所示: class IP { private: union //由此匿名联合体可以看出,IP地址共占4个字节 { struct //这是一个由4个字节构成的匿名结构体 { unsigned char