一元运算符

C++运算符重载

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-05 05:25:41
1、什么是运算符重载? (1)运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的 数据类型 。 因为在实际中确实有这种需求,例如将两个类对象直接相加,直接比较两个类对象的大小.....等等,因为普通的运算符 不能完成这种功能,所以在适当的时候对运算符进行重载,能够给我们的编程带来很大的方便。 (2)运算符函数定义的一般格式: <返回类型说明符> operator<运算符符号>(<参数表>) { <函数体> } 2、运算符重载的分类:一元运算符重载、二元运算符重载 一元运算符表示的是这中运算符只需要一个数参与运算,而二元运算符表示这种运算符需要两个数参与运算;例如:两个是相加的 "+"运算,就是一个二元运算符,两个数相乘的 "*" 运算符也是一个二元运算符;而 "++" "--",还有作为取反的负号运算符 "-" 等等都是一元运算符。 (1)一元运算符重载,本例子中使用 "-" 和 "++"运算符来演示一元运算符重载的使用," ++"运算符的两种重载方式:前置++、后置++ 按照运算符重载的方式来说,一般分为友元函数重载和成员函数重载两种方式,下面分别用代码进行说明: 1 #include <iostream> 2 using namespace std; 3 4 class Coordinate{ // 定义一个坐标类 5 public: 6

4.0 C++远征:重载运算符

感情迁移 提交于 2020-02-05 05:25:12
目录 重载运算符 四、重载运算符 1.一元运算符重载 2.二元运算符重载 重载运算符 四、重载运算符 ​ 概念 : 给原有运算符赋予新功能。 ​ 本质 : 函数重载。 ​ 关键字 : operator 1.一元运算符重载 ​ 符号只与一个操作数进行运算。 Ⅰ -(负号)的重载(取反啊) 友元函数重载 // Coordinate.hpp class Coordinate { friend Coordinate& operator-(Coordinate &coor); public: Coordinate(int x, int y); private: int m_iX; int m_iY; }; // Coordinate.cpp Coordinate& Coordinate::operator-(Coordinate &coor) { coor.m_iX = -coor.m_iX; coor.m_iY = -coor.m_iY; return *this; } // main.cpp int main() { Coordinate coor(3, 5); -coor; // operator-(coor); return 0; } ​ 成员函数重载 // Coordinate.hpp class Coordinate { public: Coordinate(int x, int

&与&&的区别

人走茶凉 提交于 2020-02-04 17:42:39
二元运算符 (&) 为整型和 bool 类型预定义了二进制 & 运算符。对于整型,& 计算操作数的按位“与”。对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,其结果才为 true。 条件“与”运算符 (&&) 执行布尔操作数的逻辑“与”运算,但如有必要,只计算第二个操作数。它与二元运算符 (&)很像,不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,与操作的结果都为 false)。这被称作为“短路”计算。 BTW (&) 也可作为一元运算符,返回操作数的地址 PS. (|) 与 (||) 运算符也是一样的道理 详见 &与&&的区别 来源: https://www.cnblogs.com/zhanbiqiang/p/4010309.html

day02_数据类型转换、运算符

▼魔方 西西 提交于 2020-02-01 02:16:00
数据类型转换 Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。java中数据类型转换分为自动类型转换和强制类型转换。 自动转换 一个 int 类型变量和一个 byte 类型变量进行加法运算, 结果会是什么数据类型? public class Demo { public static void main(String[] args) { int a = 41; byte b = 66; // byte result = a + b; 错误,不能使用byte类型的数据接收结果 int result = a + b; } } 运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。byte 类型内存占有1个字节,在和 int 类型运算时会提升为 int 类型 ,自动补充3个字节,因此计算后的结果还是 int 类。同样道理,当一个 int 类型变量和一个 double 变量运算时, int 类型将会自动提升为 double 类型进行运算。 概念 : 将 取值范围小的类型 自动提升为 取值范围大的类型 就是自动类型转换 转换规则 : 范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。 byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double

表达式和运算符

孤街醉人 提交于 2020-01-27 00:05:16
表达式和运算符 表达式 具有一个或多个操作数, 零个或多个运算符, 可以计算且结果为单个值、对象、方法或命名空间的代码片段。 如 i++; 其中 i 为操作数, ++ 为运算符 运算符 按操作数可以分为 一元运算符(++, new) 二元运算符(+, -, *, /) 三元运算符(条件运算符?:, 唯一一个三元运算符) 按操作类型可以分为 类型 符号表示 基本运算符 X.y, f(x), a[x], x++, x--, new, typeof, checked, unchecked, default, delegate 一元运算符 +, -, !, ~, ++x, --x, (T)x 乘除运算符 *, /, % 加减运算符 +, - 移位运算符 <<, >> 关系和类型检测运算符 <, >, <=, >=, is, as 相等运算符 ==, != 逻辑运算符 &, ^, | 条件运算符 &&, ||, ?: 赋值运算符 =, +=, -=, *=, /=, %=, &=, 其优先级从上到下依次增强, 相同优先级情况下, 左结合运算符从左到右顺序计算, 右结合运算符从右到从顺序计算. 在所有运算符当中, 赋值运算符和三元运算符是右结合运算符, 其他所有二元运算符都是左结合运算符. 建议多用括号进行优先级标记. 另一点需要注意的是,相等运算符对于值类型数据的判断

04 位运算符、运算符优先级

家住魔仙堡 提交于 2020-01-26 14:11:18
# ###(7)位运算符: & | ~ ^ << >> var1 = 19 var2 = 15 # & 按位与 res = var1 & var2 print(res) ''' 10011 01111 00011 ''' # | 按位或 res = var1 | var2 print(res) ''' 10011 01111 11111 ''' # << 左移 """ n<<m n乘以2的m次幂 """ res = 5 << 2 # 相当于5 * 2的2次幂 """ 00000101 00010100 4+16 = 20 """ # >> 右移 '''n>>m n除以2的m次幂''' res = 5 >> 1 """ 00000101 00000010 """ print(res) # ^ 按位异或 """两个值[不相同]方为真,两个值[相同]方为假""" res = var1 ^ var2 ''' 10011 01111 11100 ''' print(res) # ~ 按位非 - ( n+1 ) res = ~19 res = ~-21 print(res) # 运算符的优先级 ''' 一元运算符: 同一时间只操作一个数字运算的 ( ~ - ) ~19 二元运算符: 同一时间只操作两个数字运算的 (+ - * /) 5 + 3 整体一元运算符优先级 > 二元运算符

C++课程学习笔记第四周:运算符的重载

六眼飞鱼酱① 提交于 2020-01-25 17:55:12
1 运算符重载基本概念和形式 1.1 运算符重载基本概念 在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的,因为C++中预定义的运算符并未提供这种功能。 为了让对象也能通过运算符进行运算(这样代码更简洁,容易理解),C++提供了运算符重载的机制。 运算符重载的含义:对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。比如 5 + 4 = 9; complex_a + complex_b 生成新的复数对象。 运算符重载的目的:扩展C++中提供的运算符的适用范围,使之能作用于对象。 1.2 运算符重载的形式 返回值类型 operator 运算符(形参表){ …… } 运算符重载的实质是函数重载; 把含运算符的表达式转换成对运算符函数的调用,把运算符的操作数转换成运算符函数的参数; 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。 可以重载为普通函数,也可以重载为成员函数; 重载为成员函数时,参数个数为运算符目数减一;重载为普通函数时参数个数为运算符目数。 //示例 class Complex{ public: double real,imag; Complex( double r = 0.0, double i= 0.0 ):real(r),imag(i) { }

C#运算符重载

无人久伴 提交于 2020-01-23 14:30:40
1.运算符重载 通过运算符重载,可以对我们设计的类使用标准的运算符,例如+、-等。这称为重载,因为在使用特定的参数类型时,我们为这些运算符提供了自己的实现代码,其方式与重载方法相同,也是为同名方法提供不同的参数。 要重载运算符,可给类参加运算符类型成员(它们必须是static)。一些运算符有多种用途,因此我们还指定了要处理的多少个操作数,以及这些操作数的类型,一般情况下,操作数的类型与定义运算符的类相同,但也可以定义处理混合类型的运算符。 例如,考虑一个简单类型AddClass1,如下所示: public class AddClass1 { public int val; } 这仅是int值得一个包装器,但可以用于说明原理,对于这个类,下面的代码不能编译: AddClass1 op1 =new AddClass1(); op1.val= 3; AddClass1 op2 = new AddClass1(); op2.val=5; AddClass1 op3 = op1+op2; 其错误是+运算符不能应用于AddClass1类型的操作数,因为我们尚未定义要执行的操作。下面的代码则可执行,但无法得到预期结果: AddClass1 op1 =new AddClass1(); op1.val= 3; AddClass1 op2 = new AddClass1(); op2.val=3;

变量和运算符

自古美人都是妖i 提交于 2020-01-18 02:07:23
一:变量   定义:一个数据在内存中储存空间的表示,在主方法运行的过程中可以发生改变。   变量名:可以迅速从内存中获取指定的数据。 二:数据类型分类   0.1基本数据类型:     java中8种基本类型:    数值类型:       byte 字节    -128到127   1byte = 8bit(位);       short 短整型       int 整型   -2的31次方到2的31次方-1       long 长整型   浮点类型:(小数)       float 单浮点       double 双浮点   数值类型的取值范围: boolean 类型变量的取值有:ture、 false, 1字节( 8位) char数据类型有:unicode字符, 16位 byte:一个字节( 8位)(- 128~ 127)(- 2的 7次方到 2的 7次方- 1) short:两个字节( 16位)(- 32768~ 32767)(- 2的 15次方到 2的 15次方- 1) int:四个字节( 32位)(一个字长)(- 2147483648~ 2147483647)(- 2的 31次方到 2的 31次方- 1) long:八个字节( 64位)(- 9223372036854774808~ 9223372036854774807)(- 2的 63次方到 2的 63次方- 1

第2章 Java编程基础——FAQ2.15 Java中有哪些运算符?优先级如何?

心已入冬 提交于 2020-01-18 02:01:30
FAQ2.15 Java中有哪些运算符?优先级如何? 答: Java语言中的表达式是由运算符与操作数组合而成的,所谓的运算符就是用来做运算的符号。 在Java中的运算符,基本上可分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、转型运算符等。 一、算术运算符 所谓算术运算符,也就是我们数学中学到的加、减、乘、除等运算。这些操作可以对几个不同类型的数字进行混合运算,为了保证操作的精度,系统在运算的过程中会做相应的转换。 1、数字精度 所谓数字精度,也就是系统在做数字之间的算术运算时,为了尽最大可能地保持计算机的准确性,而自动进行相应的转换,将不同的数据类型转变为精度最高的数据类型。规则如下: 1)当使用运算符把两个操作数结合到一起时,在进行运算前两个操作数会转化成相同的类型。 2)两个操作数中有一个是double类型的,则另一个将转换成double型。 3)两个操作数中有一个是float类型的,则另一个将也转换成float型。 4)两个操作数中有一个是long类型的,则另一个将也转换成long型。 5)任何其它类型的操作,两个操作数都要转换成int类型。 2、整数型运算(int型) 对于int型的相关操作,加、减、乘的结果都是非常容易理解的,重点讲一下除(/)的运算。 两个整数相除的结果是整数,这一点与数学中是不同的,在Java中,两个整数相除的结果类似于数学中的求模运算