运算符重载与操作数优先级问题
运算符重载问题
运算符的重载有以下几点需要注意:
1.不是所有的运算符都能被重载。
2.重载不能改变运算符的优先级和结合性
3.重载不会改变运算符的用法,原有有几个操作数、操作数在左边还是在右边,这些都不会改变
4.运算符重载函数不能有默认的参数
5.运算符重载函数既可以作为类的成员函数,也可以作为全局函数
6.箭头运算符->、下标运算符[ ]、函数调用运算符( )、赋值运算符=只能以成员函数的形式重载
操作符优先级
先摘录谭浩强《C程序设计》对运算符优先级的两点说明:
-
同一优先级的运算符,运算次序由结合方向来决定。
例如:
a) * 与 / 具有相同的优先级别,其结合方向为自左向右,因此3 * 5 / 4的运算次序是先乘后除;
b) - 和 ++ 为同一优先级,结合方向为自右向左,因此 - i ++ 相当于 - ( i ++ )。 -
从上述表中可以大致归纳出各类运算符优先级:
初等运行符->单目运算符->算术运算符->关系运算符->逻辑运算符->条件运算符->赋值运算符->逗号运算符
经过分析总结,编成顺口溜6句以助记忆:
初等单目一二级, // 初等运算符和单目运算符分别是第1、2优先级
乘除求余加减移, // 这句里面的运算符全归为算术运算符,移表示移位
关系等于不等于, // 关系运算符(< <= > >=)
按位与来异或或, // 位运算符优先级顺序: & -> ^ -> |
逻辑与或条件弱, // 逻辑运算符优先级顺序: && -> ||,后面跟着优先级比较低(弱)的条件运算符
赋值逗号一点破。 // 赋值,逗号最低
————————————————
版权声明:本文为CSDN博主「skywalker_leo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/skywalker_leo/article/details/6237222
内联函数
使用内联函数的时候要注意:
- 递归函数不能定义为内联函数
- 内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。
- 内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。
- 对内联函数不能进行异常的接口声明
面向对象的五大基本原则 -
五个基本原则:
- 单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
- 开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
- Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
- 依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
- 接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口