c++笔记--重载

本文是对"铁道版"c++一书的知识点总结,如果侵权,请及时告知我,将尽快删去,本文禁止转载

运算符重载

 

运算符重载为类的友元函数和成员函数

友元运算符重载函数

class X

{

…

friend 返回类型 operator 运算符(形参表);

…

};

 

返回类型 operator 运算符(形参表)

{

函数体

}

 

@表示运算符

aa@bb;隐式调用

operator@(aa,bb);显式调用

 

complex operator+(complex &a, complex &b)

{

complex temp;

…

return temp;

}

可以改写为

complex operator+ (complex &a, complex &b)

{

return complex(a.real+b.real,a.imag+b.imag);

}

这种方法建立一个无名对象,它没有对象名,是一个无名对象

在建立临时对象过程中调用构造函数,return语句将此临时对象作为函数返回值,这种方法的执行效率比较高

 

friend X operator++ (X &op);前缀方式

friend X operator++ (X &op,int);后缀方式

 

@表示运算符

@aa;隐式调用

operator@(aa);显式调用

 

  1. 运算符重载函数operator@()可以返回任何类型,甚至可以是void类型,但通常返回的雷响与它所操作的类的类型相同,这样可使重载运算符用在复杂的表达式中
  2. 有的运算符不能定义为友元运算符重载函数,如赋值运算符=、下标运算符[]、函数调用运算符()等
  3. c++编译器根据参数个数和类型来决定调用哪个重载函数,因此,可以为同一个运算符定义几个运算符重载函数来进行不同的操作

 

成员运算符重载函数

 

返回类型 operator 运算符(形参表)

{

函数体

}

 

class X

{

…

返回类型 operator 运算符(形参表);

…

};

 

返回类型 X::operator 运算符(形参表)

{

函数体

}

 

双目运算符@

aa@bb;隐式调用

aa.operator@(bb);显式调用

 

X operator ++();前缀方式

X operator ++(int);后缀方式

 

单目运算符(前缀)@

@aa;隐式调用

aa.operator@();显式调用

 

单目运算符(后缀)@

aa@;隐式调用

aa.operator@(int);显式调用,int可以用任意合法整数表示

 

c++中只能对已有的c++运算符进行重载,不允许用户自己定义新的运算符

c++中绝大部分的运算符允许重载,不能重载的运算符只有以下几个:

.        成员访问运算符

.*        成员指针访问运算符

::        作用域运算符

sizeof 长度运算符

?:        条件运算符

一般来说,重载的功能应当与原有的功能相类似

重载不能改变运算符的操作对象(即操作数)的个数

重载不能改变运算符原有的优先级

重载不能改变运算符原有的结合特性

运算符重载函数的参数至少应有一个是类对象(或类对象的引用),防止用户修改用于基本类型数据的运算符性质

双目运算符一般可以被重载为友元运算符重载函数或成员运算符重载函数,但是当类AB的一个对象与一个整数相加时,无论整数出现在左侧还是右侧,使用友元运算符重载函数都能得到很好的解决,这就解决了使用成员运算符重载函数时,由于整数出现在运算符”+”的左侧而出现的错误

 

类的赋值运算符”=”只能重载为成员函数,而不能把它重载为友元函数,双目运算符

下标运算符”[]”只能重载为成员函数,双目运算符

“()” 只能重载为成员函数,双目运算符

 

重载插入运算符和提取运算符

 

ostream& operator<<(ostream& out,自定义类名& obj)

{

…

}

 

istream& operator>>(istream& in,自定义类名& obj)

{

…

}

 

通过转换构造函数进行类型转换

 

转换构造函数是构造函数的一种,它具有类型转换的作用,它的作用是将一个其他类型的数据转换成它所在类的对象

 

class Example

{

public:

Example(int);

private:

int num;

};

Example:: Example(int n)

{

num=n;

};

int main()

{

Example X= Example(3);

}

 

通常, 使用转换构造函数将一个指定的数据转换为类对象的方法如下:

声明一个类

在这个类中定义一个只有一个参数的构造函数,参数是待转换类型的数据,在函数体中指定转换的方法

使用以下形式进行类型转换

类名(待转换类型的数据)

 

  1. 转换构造函数也是一种构造函数,它遵循构造函数的一般规则,转换构造函数只有一个参数,作用是将一个其他类型的数据转换成他所在类的对象,但是有一个参数的构造函数不一定是转换构造函数,它可以是普通的构造函数,仅仅起对象初始化的作用
  2. 转换构造函数不仅可以将一个系统预定义的标准类型数据转换成类的对象,也可以将另一个类的对象转换成转换构造函数所在的类对象

 

通过类型转换函数进行类型转换

 

将一个类的对象转换成另一类型的数据

operator 目标类型()

{

函数体

}

目标类型为希望转换成的类型,它既可以是预定义的标准数据类型也可以是其他类的类型

 

  1. 类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数,类型转换函数也可以在类体中声明函数原型,而将函数体定义在类的外部
  2. 类型转换函数既没有参数,也不能在函数名前指定返回类型
  3. 类型转换函数中必须有return语句,即必须送回目标类型的数据作为函数的返回值
  4. 一个类可以定义多个类型转换函数.c++编译器将根据类型转换函数名自动选择一个合适的类型转换函数予以调用

 

使用类型转换函数可以分为显式转换和隐式转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值