在test.cpp文件的main函数中,应用了"[]"的重载:arr1[10] = 992; 填10的时候,系统运行就会报错,填其他数都能正常,这是为什么? 报错如图:
源文件:
test.hpp文件:
#pragma once
#include<iostream>
#include<string>
using namespace std;
template<class T>
class MyArray
{
private:
T* m_pDateAddr; //数据
int m_Cap; //容量
int m_Len; //长度
public:
MyArray(int cap) //构造函数:初始化
{
this->m_Cap = cap;
this->m_Len = 0;
this->m_pDateAddr = new T[this->m_Cap];
}
MyArray(MyArray& arr) //拷贝构造函数:初始化
{
if (NULL != this->m_pDateAddr)
{
delete[] this->m_pDateAddr;
this->m_pDateAddr = NULL;
}
this->m_Cap = arr.m_Cap;
this->m_Len = arr.m_Len;
if (NULL != arr.m_pDateAddr)
{
this->m_pDateAddr = new T[arr.m_Cap];
for (int i = 0; i < this->m_Cap; i++)
{
this->m_pDateAddr[i] = arr.m_pDateAddr[i];
}
}
//cout << "MyArray(MyArray& arr) 拷贝函数" << endl;
}
MyArray& operator=(const MyArray& arr) //符号"="重载函数
{
if (NULL != this->m_pDateAddr)
{
delete[] this->m_pDateAddr;
this->m_pDateAddr = NULL;
}
this->m_Cap = arr.m_Cap;
this->m_Len = arr.m_Len;
if (NULL != arr.m_pDateAddr)
{
this->m_pDateAddr = new T[arr.m_Cap];
for (int i = 0; i < this->m_Cap; i++)
{
this->m_pDateAddr[i] = arr.m_pDateAddr[i];
}
}
return *this;
}
void tailAdd(T val)//尾插法
{
if (this->m_Len < this->m_Cap)
{
this->m_pDateAddr[this->m_Len] = val;
this->m_Len++;
}
else
{
cout << "插入的长度达到最大!" << endl;
}
}
void tailDel() //尾删法
{
if (0 == this->m_Len) //长度为0,返回
{
return;
}
this->m_Len--; //只要长度减一就行了
}
int getCapacity() //获取数组容量
{
return this->m_Cap;
}
int getLength() //获取数组长度
{
return this->m_Len;
}
T& operator[](int index) //符号"="重载函数
{
T temp;
if ((index > this->m_Len) ||(0 > index))
{
cout << "操作符[]指定的下标长度错误!" << endl;
return temp;
}
return this->m_pDateAddr[index];
}
~MyArray() //析构造函数
{
if (NULL != m_pDateAddr)
{
delete[] m_pDateAddr;
m_pDateAddr = NULL;
}
}
};
test.cpp文件:
#include<iostream>
#include<string>
#include"test.hpp"
using namespace std;
void printInt(MyArray<int> &arr) //打印int类型的数组
{
cout << "printInt:" << endl;
for (int i = 0; i < arr.getLength(); i++)
{
cout << arr[i] << endl;
}
}
void addIntVal(MyArray<int>& arr) //添加数据到int类型的数组
{
for (int i = 0; i < arr.getCapacity(); i++)
{
arr.tailAdd(i);
}
}
void delIntVal(MyArray<int>& arr) //尾删法int
{
arr.tailDel();
arr.tailDel();
}
void printChar(MyArray<char> &arr) //打印char类型的数组
{
cout << "printChar:" << endl;
for (int i = 0; i < arr.getLength(); i++)
{
cout << arr[i] << endl;
}
}
void addCharVal(MyArray<char>& arr) //添加数据到char类型的数组
{
char c = 'a';
for (int i = 0; i < arr.getCapacity(); i++)
{
arr.tailAdd(c + i);
}
}
void delCharVal(MyArray<char>& arr) //尾删法char
{
arr.tailDel();
}
class Person
{
public:
Person() {
}; //这个必须写,否则报错
Person(string name, int age)
{
m_age = age;
m_name = name;
}
int m_age;
string m_name;
};
void printPerson(MyArray<Person>& arr) //打印char类型的数组
{
cout << "printPerson:" << endl;
for (int i = 0; i < arr.getLength(); i++)
{
cout << "姓名:" << arr[i].m_name << " 年龄:" << arr[i].m_age << endl;
}
}
void delPersonVal(MyArray<Person>& arr) //尾删法char
{
arr.tailDel();
}
//main函数
int main()
{
cout << "--------------------Int数据类型---------------------" << endl;
MyArray<int> arr1(10);
MyArray<int> arr2(10);
addIntVal(arr1);
arr1[10] = 992; //这里重载了[],但为什么 [] 中填10的时候,程序运行后系统就会提示Debug Error 的错误,填其他数据没有问题。
printInt(arr1);
delIntVal(arr1);
printInt(arr1);
cout << "--------------------Char数据类型---------------------" << endl;
MyArray<char> arr3(10);
addCharVal(arr3);
MyArray<char> arr4(10);
arr4 = arr3;
printChar(arr3);
delCharVal(arr3);
printChar(arr3);
cout << "------------------自定义数据类型---------------------" << endl;
Person p1("孙悟空", 999);
Person p2("猪八戒", 888);
MyArray<Person> arr5(10); //定义数组
arr5.tailAdd(p1); //添加数据
arr5.tailAdd(p2);
printPerson(arr5); //打印
delPersonVal(arr5);
printPerson(arr5);
system("pause");
return 0;
}