C++数组类的自实现,使其可以保存学生成绩,并进行降序排列

类的封装

cpp 复制代码
#ifndef ARRAY_H
#define ARRAY_H

class DoubArray
{
private:
    int m_length;
    double* m_pointer;

public:
    DoubArray(int len);
    DoubArray(const DoubArray& obj);
    int length();
    bool get(int index, double& value);
    bool set(int index, double value);
    void sort(const DoubArray& obj);
    void show(const DoubArray& obj);
    ~DoubArray();
};

#endif // ARRAY_H

类的实现

cpp 复制代码
#include "Array.h"
#include <iostream>
using namespace std;

//构造函数,用于创建数组并初始化
DoubArray::DoubArray(int len)
{
    m_pointer = new double[len];

    for(int i = 0; i < len; i++)
    {
        m_pointer[i] = 0;
    }

    m_length = len;
}

//拷贝构造函数,用于深拷贝
DoubArray::DoubArray(const DoubArray& obj)
{
    m_length = obj.m_length;

    m_pointer = new double[obj.m_length];

    for(int i = 0; i < obj.m_length; i++)
    {
        m_pointer[i] = obj.m_pointer[i];
    }
}

//数组排序
void DoubArray::sort(const DoubArray& obj)
{
    int len = obj.m_length;

    for(int i = 0; i < len; i++)
    {
        for(int j = 0; j < len - i; j++)
        {
            if( obj.m_pointer[j] < obj.m_pointer[j+1] )
            {
                double temp = obj.m_pointer[j];
                obj.m_pointer[j] = obj.m_pointer[j+1];
                obj.m_pointer[j+1] = temp;
            }
        }
    }
}

//获取数组长度
int DoubArray::length()
{
    return m_length;
}

//获取数组成员
bool DoubArray::get(int index, double& value)
{
    bool ret = (0 <= index) && (index < length());
    if( ret )
    {
        value = m_pointer[index];
    }

    return ret;
}

//设置数组成员
bool DoubArray::set(int index, double value)
{
    bool ret = (0 <= index) && (index < length());
    if( ret )
    {
        m_pointer[index] = value;
    }

    return ret;
}

//遍历数组
void DoubArray::show(const DoubArray& obj)
{
    int len = obj.m_length;
    for(int i = 0; i  < len ; i++)
    {
        cout << obj.m_pointer[i] << endl;
    }
}

//析构函数,销毁数组
DoubArray::~DoubArray()
{
    delete[]m_pointer;
}

主函数调用

cpp 复制代码
#include <iostream>
#include "Array.h"
using namespace std;

int main()
{
    double score = 0;
    int num = 0;
    cout << "请输入学生人数:";
    cin >> num;
    DoubArray stu_a(num);

    for(int i = 0; i < num; i++)
    {

        cout << "请输入第" << i+1 << "个学生的成绩:";
        cin >> score;
        stu_a.set(i, score);
    }

    cout << "学生成绩降序排列如下:";
    stu_a.sort(stu_a);
    stu_a.show(stu_a);

    return 0;
}

程序效果

相关推荐
潼心1412o35 分钟前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
-森屿安年-1 小时前
按身高排序
c++·算法
(Charon)2 小时前
【C++面试】vector底层原理:扩容、拷贝移动与迭代器失效
c++·面试
朔北之忘 Clancy3 小时前
青少年软编等考七级题解目录
开发语言·c++·青少年编程·gesp·csp·信奥赛·noi
汉克老师3 小时前
GESP2026年9月认证C++七级( 第一部分选择题(8~15题)精讲
c++·gesp·小学生·学c++编程
Mr_Macallon3 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
如意猴3 小时前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i4 小时前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
汉克老师4 小时前
GESP2026年9月认证C++一级( 第三部分编程题(1、新龟兔赛跑))精讲
c++·gesp·小学生·学c++编程
沫璃染墨4 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理