目录
2.输入/输出流的重载:输入输出重载,最好定义为友元类型进行重载。
1.函数名的重载:当函数名相同但参数不同可以重载:
bool trade(const Moster &moster); //1.卖指定妖兽
bool trade(Immortal &other,const Moster &moster); // 2.用灵石购买妖兽
2.输入/输出流的重载:输入输出重载,最好定义为友元类型进行重载。
以输出重载为例:(1)在类里面申明:Monster妖兽类
friend ostream operator << (ostream &os,const Monster &monster);
(2)外部实现:Monster::ostream operator << (ostream &os,const Monster &monster) {
os<< "妖兽属性:"<<monster.power<<endl;
return os;
}
总结:(1)用法类似于stringstream ret;类似往里面塞东西,没有返回类型。
(2)可以直接输出对象:cout<<monster;
(3)外部函数重载要两个参(包括友元函数),类的成员函数重载一个参数,第一个默认自己的对象this。
3.比较运算符重载==、>、<、+、-等
以等于运算重载:使用第二种类的成员函数重载:
class Monster{
public:
bool operator == (const Monster &other); //重载等于号,返回bool类型
private:
string name;
int grade;//等级
}
//再实现等于号重载,内部函数只传需一个参数
bool Monster::operator == (const Monster &other) {
if(this->name == other.name && this->grade == other.grade) return true;
else return false;
}
4.赋值运算符重载 =:
继续以妖兽类举例:
class Monster {
public:
Monster & operator = (const Monster &other); //注意和前面不同返回的是类,减少开销&引用
private:
string name;
int grade;//等级
}
//再实现=赋值重载
Monster & operator = (const Monster &other) {
this->name = other->name;
this->grade = other->grade;
return *this;
}
总结:(1)赋值重载在于返回类型是类,比较运算重载返回时bool这些,输入输出重载无返回;
(2)减少开销,返回引用类型。
(3)注意赋值重载如果参数传递是指针Monster & operator = (const Monster *other)是无效代码,原因在于浅拷贝了。
5.下标运算符重载:[]
(1)这个用的很少,大概定义是 int operator [] (int index);
6.类型之间的转换
(1)类型转换为类:通过构造函数(传递部分参数);
(2)类转类型:类型转换重载:operator int() const;
(3)类之间转换:构造函数传参是对象: 功能等同于赋值运算符重载(=);
Monster(const Monster &other) ;
7.一些bug的解决:
(1)找到一个或多个多重定义的符号:将方法的实现放到cpp文件里面;
(2)不能使用完整定义类XX:不能使用某个类方法,添加该类的.h头文件.
(3)开始学习Markdown格式文件,学习Typora语法。