C++下标运算符重载-实例

有如下题目,设计代码实现题目要求。

为了统计全年级学生考试成绩的分数段分布情况,即1~10、11~20、21~30、...、91~100等各个分数段的学生人数,拟设计实现一个重载了下标运算符的类,该类对象使用元素为考试成绩的数组和数组元素个数来初始化,当使用0~9的整数下标k来访问该对象时,返回 第k分数段(10*k + 1 <= e <= 10*k + 10)中的元素个数。 

代码分文件编写:

//类声明
#pragma once
class ArrayStuScore
{
public:
	ArrayStuScore(int length = 0);  //有参构造函数定义

	~ArrayStuScore();               //析构函数定义

	int operator[](int num);        //数组下标重载函数定义

	int& func(int i);              //数组赋值函数,通过左值引用的方式
private:
	int m_Length;                    //数组长度
	int* m_P;                        //数组指针

};

在头文件中定义一个ArrayStuScore类,类中定义有参构造函数、析构函数、下标[]重载函数、数组赋值函数func;

类中有两个私有成员变量,分别为数组长度和指向数组的指针;

有参构造函数的作用:为类成员变量数组长度赋值,这样在定义不同对象时,可以指定不同的数组长度;

析构函数:因类成员存在指针类型,当销毁类对象时,需要在析构函数中通过销毁指针而释放对象的数据;

下标[ ]重载函数:重载下标[ ],实现题目要求——当使用0~9的整数下标k来访问该对象时,返回 第k分数段(10*k + 1 <= e <= 10*k + 10)中的元素个数;

数组赋值函数func:外部定义的数组,通过成员变量指向数组的指针指向这个数组,需要注意这个函数是通过左值引用的方式给指针赋值;

//类中函数定义
#include "类声明.h"
#include <string>

ArrayStuScore::ArrayStuScore(int length)
{
	m_Length = length;
	if (length == 0)
	{
		m_P = NULL;
	}
	else
		m_P = new int[length];
}

ArrayStuScore::~ArrayStuScore()
{
	delete[] m_P;
}

int& ArrayStuScore::func(int i)
{
	return m_P[i];
}

int ArrayStuScore::operator[](int num)
{
	int count = 0;
	for (int i = 0; i < m_Length - 1; i++)
	{
		if (m_P[i] >= 10 * num + 1 && m_P[i] <= 10 * num + 10)
		{
			count++;
		}
	}
	return count;
}

 上边一段代码是对类中函数的具体定义。

//主函数
#include <iostream>
using namespace std;
#include <string>
#include "类声明.h"

void test()
{
	int arr[] = { 20,30,30,50,60,20,80,30,100,10,30,30,40,50,60,70,80,90,100,10,20,30,40,50,60,70,80,90,100,10 };
	int num = sizeof(arr) / sizeof(int);
	ArrayStuScore array(num);
	for (int i = 0; i < num; i++)
	{
		array.func(i) = arr[i];
	}

	cout << array[2] << endl;

}

int main()
{
	test();
	system("pause");
	return 0;
}

代码中,定义一个类,可以通过创建这个类的对象,实现将一个不定大小的数组传入这个对象中,并通过下标重载函数对这个数组进行操作。

数组长度通过有参构造函数传入,数组元素通过返回值类型为引用的成员函数传入。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值