重载的含义
c++允许在同一个作用域中某个函数和运算符指定多个定义,重载声明是指一个与之前已经在作用域里声明过的函数或者方法具有相同名称的声明,他们的参数列表和实现是不同的。
重载函数
在同一个作用域里,可以声明几个功能相似的同名函数,当时同名函数的参数个数,类型和我顺序必须不同。
例如通过一个重载 printf 函数,输出不同 参数类型 的输出值。
重载运算符
重载的运算符是带有特殊名称的函数,函数名由关键字operator以及其后要重载的运算符符号构成,将对象作为参数进行传递,对象的属性用this运算符进行访问。
1、小型字符串 重载运算符+
MinString operator + (const MinString& AddStr)
{
MinString NewStr("");//新建字符串
if (AddStr.length != 0)//参数不为零
{
if (NewString.sPtr != 0)//原有字符串不为零
delete[]Newstr.sPtr;//清空字符串
NewStr.length = length + AddStr.length;//求出新的长度
NewStr.sPtr = new char[NewStr.length + 1];//新char 一个字符串长度
strcpy(NewStr.sPtr, sPtr);//将原有的字符串复制到新的字符串中
strcat(NewStr.sPtr, AddStr.sPtr);//将新加入的字符串也加入
}
return NewStr;
}
2、小型字符串 重载运算符+=
MinString& operator+=(const MinString& AddStr)
{
char temp[100];//临时数组
if (AddStr.length != 0)
{
strcpy(temp, sPtr);//将对象复制到临时数组中
int OldLen = length;//旧的数据长度
if (sPtr != 0)//如果数据等于0会有数据泄露的后果
delete[]sPtr;
length = OldLen + AddStr.length; //新的数据长度
sPtr = new char[length + 1];//新的数据区
strcpy(sPtr, temp);//将临时数组的数据复制到此对象中
strcat(sPtr, AddStr.sPtr);
}
return *this;
}
3、类intArray 重载运算符[]
intArray::inArray(const char* filename)
{
ifstream myFile(filename);
int len = 300;
arry = new int[len];
length = 0;
while (myFile>>array[lenghth++]);
length--;
myFile.close();
}
3、小型字符串重载运算符<<和>>
friend ostream& operator<<(ostream& output, const MinString& s)、
//重载流插入运算符
{
output << s.sPtr;
return output;
}
friend istream& operator>>(istream& input, const MinString& s)
//重载符提取运算符
{
char temp[100]; //用于输入的临时数组
temp[0] = '0';//初始化
input >> setw(100) >> temp;
if (s.sPtr != 0)
delete[]s.sPtr;//避免内存泄漏
int inLen = strlen(temp);//输入字符串长度
s.length = inLen;//赋长度
s.sPtr=new char[s.length+1]
if (inLen != 0)
{
strcpy(s.sPtr, temp);
}
else
{
s.sPtr[0] = '\0';
}
return input;
}