卷一 :C++第10篇,修仙项目--深入理解运算符重载

本文详细介绍了C++中函数重载、输入/输出流重载、比较运算符重载、赋值运算符重载、下标运算符重载、类型转换及常见bug解决方法。通过实例解析了每个操作的关键实现细节,如输出流重载的友元函数使用,赋值运算符重载的效率优化,以及如何通过构造函数进行类型转换。此外,还提到了解决多重定义符号和类完整定义问题的策略。
摘要由CSDN通过智能技术生成

                                                        目录

1.函数名的重载:当函数名相同但参数不同可以重载:

2.输入/输出流的重载:输入输出重载,最好定义为友元类型进行重载。

3.比较运算符重载==、>、<、+、-等

4.赋值运算符重载 =:

5.下标运算符重载:[]

6.类型之间的转换

7.一些bug的解决:


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语法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值