C++之str类的简单实用与运算符重载的实质

第一部分,str类的使用

#pragma once

#include<iostream>
#include<string>
using namespace std;
class str{
private:
char*st;
public:
str(char *s);//使用字符指针的构造函数
str(str&s);//使用对象引用的构造函数
str& operator=(str&a);//重载使用对象引用的赋值运算符
str& operator=(char*s);//重载使用指针的赋值运算
void print(){ cout << st << endl; }//输出字符串
~str(){ delete st; }
};
str::str(char *s)
{
st = new char[strlen(s) + 1];//为st申请内存
strcpy(st, s);//将字符串s复制到内存区st
}
str::str(str&a)
{
st = new char[strlen(a.st) + 1];
strcpy(st, a.st);
}
str& str::operator=(str& a)
{
if (this == &a)
return *this;
delete st;
st = new char[strlen(a.st) + 1];
strcpy(st, a.st);
return *this;
}
str& str::operator=(char *s)
{
delete st;
st = new char[strlen(s) + 1];
strcpy(st, s);
return *this;
}
int main()
{
str s1("We"), s2("They"), s3(s1);//调用构造函数和复制构造函数
s1.print(); s2.print(); s3.print();
s2 = s1 = s3;//调用赋值操作符
s3 = "Go home!";//调用字符串赋值操作符
s3 = s3;//调用赋值操作符但不进行赋值操作。
s1.print();
s2.print();
s3.print();
}

第二部分:运算符重载的实质

在这里我想说运算符重载的实质其实是函数重载 ,如operator+(5, 6),那编译器在执行这个函数时是怎样的呢?编译器首先会去找和参数类型匹配的函数,找到operator+(int, int)函数,执行操作,进而得到我们想要的结果。当我们operator+(5.0, 6.0),那编译器则会找到operator+(float, float)函数,执行它,进而实现我们的操作。由此可以看出我们的运算符重载,其实是我们的函数重载(函数名相同,参数类型不同),在这个例子中operator+就是函数名,我们可以给它传不同类型的值,从而实现我们的重载。这个例子其实就是借助str类对运算符重载的一个说明。运算符重载的目的其实是为了复用。




猜你喜欢

转载自blog.csdn.net/weixin_40797414/article/details/80934741