类型转换

C++运算符重载与类型转换

余生长醉 提交于 2019-11-27 01:35:35
1.基本概念 当运算符被用于类类型对象时,C++语言允许我们为其指定新的含义,同时,我们也可以自定义类类型之间的转换规则。 以下是运算符重载时需要注意的几个原则: 当运算符作用于内置类型对象时,我们无法改变该运算符的含义 我们只能重载已存在的运算符,不能发明新的运算符 重载的运算符的优先级和结合律与对应的内置运算符保持一致 以下运算符不能被重载: :: .* . ? : 应使用与内置类型一致的含义 关于选择重载运算符函数作为成员还是非成员函数: 赋值(=)、下标( [ ] )、调用( ( ) )和成员访问箭头( -> )必须是成员 复合赋值运算符(+=之类)一般来说应该是成员 改变对象状态的运算符或者与给定类型密切相关的运算符,入递增、递减和解引用运算符,通常应该是成员 具有对称性的运算符可能转换任意一端的运算对象,例如算术、相等性、关系和位运算符等,通常应是非成员函数 下面以String为例演示重载各个运算符的用法。 2.输入和输出运算符 //输入输出函数只能是非成员函数,故要在类内声明为友元函数 friend std::ostream &operator<<(std::ostream &os, const String &s); friend std::istream &operator>>(std::istream &is, String &s); /*输出函数较为简单

【M30】代理类

こ雲淡風輕ζ 提交于 2019-11-27 01:30:35
1、考虑二维数组,在栈上分配,必须在编译时确定大小,也就是大小是常量。另外一点,C++不支持在堆上分配二维数组。怎么解决这个问题?   二维数组可以看成,一维数组的数组。因此,可以使用代理类,Array2D的元素是Array1D,Array1D是一维数组,为了支持[][]操作,Array2D重载操作符[],Array1D重载操作符[]。 2、区分operator[]的读写操作,考虑string,基于引用计数的string,赋值是浅拷贝,两个指针指向同一块内存。通过[]获取string中的字符,如果只是读取,没有关系,还可以共享。如果是写操作,必须做一个副本。因此,对于[],需要想办法区分是读操作还是写操作。 3、string中的字符不再使用char,使用代理类CharProxy,为了让CharProxy和char在使用效果上保持一致,提供隐式类型转换(char转换为CharProxy)和隐式类型转换操作符(CharProxy转化为char),CharProxy的copy赋值是写操作,CharProxy的隐式类型转换操作符是读操作。 4、代理类还有一个典型用处,那就是禁止隐式类型转换。隐式类型转换只能进行一次,增加一个代理类,就能禁止隐式类型转换。 转载于:https://www.cnblogs.com/nzbbody/p/3643451.html 来源: https://blog

【M2】最好使用C++转型操作符

我怕爱的太早我们不能终老 提交于 2019-11-27 01:18:02
1、C语言中的转型操作符有两个问题:   a、是个通用的转换操作符,也就是说,可以从一个类型转换到其他类型。通用必定是低效率和冗余的,因为要考虑很多情况。   b、在代码中,难以辨认出哪些是类型转换。 2、C++提供了新式的转换操作符,有static_cast, dynamic_cast, const_cast, reinterpret_cast, 可以认为对不同的类型转换进行了细化,精确地指出意图,效率高。另外一方面,很容易在代码中辨认出这些类型转换。 3、考虑,C++新式转换符的用法。   a、const_cast:去除对象的常量性。   b、dynamic_cast:用于向下转型或者跨系转型,类型必须要有虚方法表。转换是安全的,转换目标是指针,转换失败返回null,转换目标是引用,抛出异常。   c、reinterpret_cast:比较特殊,不具移植性。比如:方法指针为 void (*)(int),把方法int F(int) 赋给方法指针,需要类型转换。   d、其它的情况下,使用static_cast。 转载于:https://www.cnblogs.com/nzbbody/p/3576844.html 来源: https://blog.csdn.net/weixin_30770495/article/details/99234692

【M5】对定制的“类型转换函数”保持警觉

两盒软妹~` 提交于 2019-11-27 01:17:36
1、隐式类型转换有两种情况:单个形参构造方法和隐式类型转换操作符。注意:隐式类型转换不是把A类型的对象a,转化为B类型的对象b,而是使用a对象构造出一个b对象,a对象并没有变化。 2、单个形参构造方法包括两种情况:声明只有单个形参;或者声明有多个形参,但是除了第一形参,其他的形参都有默认值,也就是说,只要单个形参就能构造对象。   注意:默认形参必须从右向左进行。思考为什么?   调用方法的时候,从左到右使用实参初始化形参,没有提供实参,就使用默认形参值,因此默认形参必须从右向左进行。比如,有5个形参,后面三个有默认值,调用方法的时候,提供三个实参,后面两个使用默认值。 3、隐式类型转换操作符,是一种特殊的方法,可以认为没有形参,没有返回方法,重载了目标类型的方法。 4、隐式类型转换可能在非预期的情况下进行。也就是说,程序员本来没有这个意图,但是编译器为了使方法调用成功,偷偷地进行了隐式转换。因此,隐式类型转应该尽量避免。 5、对于隐式类型转换操作符,最好不要提供,而是应该提供一个AsXXX()方法。 6、对于单个形参构造方法,有两种办法。   a、对于构造方法使用explicit,可以禁止隐式类型转换。这种情况下,可以显式地进行隐式类型转换。   b、增加一个代理类。这是因为,隐式类型转换最多只能进行一次。增加代理类,相当于需要进行两次隐式转换才能成功。这种情况下,编译器放弃执行

Java连载15-boolean类型&类型转换&++运算符

本小妞迷上赌 提交于 2019-11-27 01:07:11
一、boolean类型 1.说明: (1)在java语言中,boolean类型只有两个值:true、false,没有其他的值。在C语言中,是有0代表false和1代表true的 (2)在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true是1 (3)布尔类型在实际开发过程中是非常重要的,经常使用在逻辑运算和条件控制语句中。 public class d15_{ public static void main(String[] args){ boolean i1 = true; if(i1){ System.out.println("我被正确数出了"); }else{ System.out.println("我被错误输出了"); } } } 二、数据类型之间的类型转换 1.转换规则 (1)八种基本数据类型之中除了boolean类型之外其他七种可以互相转换 (2)小容量向大容量转换。称为自动转换类型。容量从大到小排序: byte<short=char<int<long<float<double 注意:任何浮点类型不管占用多少字符,都比整数类型容量大。char和short可以表示的种类数量相同,但是char可以取到更大的正整数。 (3)大容量向小容量转换,称为强制类型转换,需要加上强制类型转换符,程序才能编译通过,但是运行阶段可能会损失精度

05.MyBtais两种取值符号以及Parameter为简单,对象,嵌套对象类型

99封情书 提交于 2019-11-27 00:29:49
输入参数:parameterType 两种取值符号的异同 1.类型为简单类型(8个基本类型+string) 不同点: a.#{任意值},${value} 其中的标识符只能是value b. #{}自动给String类型加上单引号(‘’) (自动类型转换)   ${} 原样输出,适合于动态排序 (动态字段) c.#{}可以防止sql注入  ${}不防止sql注入 相同点: 都可以获取对象的值或者嵌套对象的值 2.类型为对象类型: #{属性名} ${属性名} 来源: https://www.cnblogs.com/man-tou/p/11336592.html

js数据类型、运算符

心已入冬 提交于 2019-11-27 00:23:47
1、数据类型 变量命名规则 不能使用关键字和保留字 关键字:已有的语法 保留字:还没有使用的关键字 首字母可以是字母、下划线、$符,不能是数字、运算符 适合多个单词定义变量: 驼峰命名,第二个单词首字母大写 匈牙利命名法,单词前添加数据类型辨识,如iNum 下划线命名,通过下划线连接多个单词 折行显示 当引号内的代码片段需要折行,例如: '<ul><li> </li></ul>' 可以用+好进行连接: '<ul><li>'+ '</li></ul>' 可以用\进行隔开: '<ul><li>\ '</li></ul>\ 注意:使用\时,前后不能有空格 可以使用ES6语法包括: `<ul><li> </li></ul>` 数据类型 字符串 var foo = ‘这是一个字符串’; var bar = ‘hello world’; 数字 var foo = 100; 布尔值 var a = true; var b = false; 对象 var a = {}; //对象 var b = []; //数组 var c = function(){}; //函数 null : 空 var a = null; undefined : 未定义 var a = undefined; undefined与null的区别 null计算的时候,会转成0,而undefined不会转。

八月第二周

◇◆丶佛笑我妖孽 提交于 2019-11-26 22:50:33
在本周关于Java面向对象的核心内容的学习中,包括对象和封装、继承、多态、抽象类和抽象方法、接口等。继承是Java中实现代码重用的重要手段之一,Java中只支持单继承,即Object类是所有Java类的祖先。在子类中可以根据实际要求对从父类继承的方法进行重新编写,称为方法的重写或覆盖。子类中重写的方法和父类中被重写的方法必须具有相同的方法名、参数列表,返回值类型必须和被重写的返回值类型相同。在实例化子类时,会首先执行父类的构造方法,然后再执行子类的构造方法。通过super关键字可以访问父类的成员。通过多态可以减少类中的代码量,提高代码的可拓展性和可维护性,继承是多态的基础。在多态的应用中,可以使用父类作为方法的形参和返回值。把子类转换为父类称为向上转型,系统自动进行类型转换。把父类转换为子类称为向下转型,必须进行强制类型转换。向上转型后,通过父类引用变量调用的方法是子类覆盖或继承自父类的方法,通过父类引用变量无法调用子类特有的方法。向下转型后可以访问子类特有的方法,必须转化为父类指向的真实子类类型,否则将出现类型转换异常ClassCastException。instanceof运算符用于判断一个对象是否属于一个类。 下周学习计划:抽象类和接口。 来源: https://www.cnblogs.com/fengjingfei/p/11334508.html

Java的继承、封装和多态

时光总嘲笑我的痴心妄想 提交于 2019-11-26 22:02:54
Java的继承、封装和多态 一、封装 1、概念: 2、好处: 3、封装的实现步骤 二、继承 1、概念: 2、继承的好处: 3、语法规则: (1)方法的重写 (2)final关键字: (3)super关键字 (4)Object类 三、多态 1.引用多态 2.方法多态 A.引用类型转换 B.抽象类 C.接口 一、封装 1、概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。 2、好处: 实现了专业的分工 良好的封装能够减少耦合 类内部的结构能够自由修改 可以对成员进行更精确的控制 隐藏信息,实现细节 3、封装的实现步骤 1)将属性私有化,设为private类型 2)对所有私有属性创建Getters和Setters方法 public class Circle { private double radius; public final double getRadius() { return radius; } public final void setRadius(double radius) { this.radius = radius; } } 二、继承 1、概念: 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类

java 封装、继承和多态

谁说我不能喝 提交于 2019-11-26 22:00:53
面向对象三大特性: 封装,继承,多态 一、封装: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过类提供的放法来实现对隐藏信息的操作和访问 1、封装实现: (1)修改属性的可见性:设为private; (2)创建getter/setter方法:用于属性的读写; (3)在getter/setter方法中加入属性控制语句,对属性值的合法性进行判断。 2、包的作用:管理Java文件,解决同名文件冲突 3、定义包:package 包名 //必须放在Java源程序的第一行 包名间可以使用“.”隔开 4、系统中的包: java.(功能).(类) java.lang.(类) 包含Java语言基础的类 java.util.(类) 包含Java语言中各种工具类 java.io.(类) 包含输入,输出相关功能的类 5、包的使用: (1).可以通过使用import关键字,在某个文件使用其他文件中的类。 (2).Java中,包的命名规范是全小写字母拼写 (3).使用的时候不但可以加载某个包下的所有文件 eg:com.imooc.* 也可以加载某个具体子包下的所有文件 6、访问修饰符: 7、this关键字代表当前对象 this.属性 操作当前对象的属性 this.方法 调用当前对象的方法 封装对象的属性的时候,经常会使用this关键字。 8、什么是 Java 中的内部类 问:什么是内部类呢? 答