//############################################################################
/* 隐式类型转换
*
* 类型转换可分为:
* 隐式 显式
* 标准类型转换 A B
* 用户定义类型转换 C D
* (casting)
*
*
* A: 隐式标准类型转换
*/
char c = 'A';
int i = c; // 整型提升 char* pc = 0; // int -> Null pointer void f(int i);
f(c); dog* pd = new yellowdog(); // 指针类型转换 /*
* C: 隐式用户定义类型转换
*
* 在类内定义
*
* 转换 1: 将其他类型对象转成当前类型的对象
* - 具有可以接收一个参数的构造函数
* 转换 2: 将当前类对象转换成其他类型
* - 使用类型转换函数
*/
class dog {
public:
dog(string name) {m_name = name; } // NO explicit,单个参数的构造函数,如果没有显式地explicit,它同时也是类型转换函数
// 如果不想隐式地定义类型转换,加上explicit
string getName() {return m_name;}
private:
string m_name;
}; void main ()
{
string dogname = "Bob";
dog dog1 = dogname;
printf("My name is %s.\n", dog1.getName());
} OUTPUT:
My name is Bob /* 原则: 使接口易于正确使用,不易错误使用
* 理想情况,无法编译通过
*
* 一般指导原则:
* 1. 避免定义看起来不期望的转换
* 2. 避免双向隐式转换,会出现二义性
*/ //转换 2:
//operator string () const { return m_name; }
// string str = dog1;
// /* 隐式类型转换在处理数值类型的类时很有用
* 比如分数类
*/
class Rational {
public:
Rational(int numerator = 0, int dennominator = 1):
num(numerator),den(denominator) {}
int num; // Demo only, public data members are not recommended
int den; const Rational operator*(const Rational& rhs) {
return Rational(num*rhs.num, den*rhs.den);
}
}; int main ()
{
Rational r1 = 23;
Rational r2 = r1 * 2;
} // Rational r3 = 3 * r1; //如果要想使用需要定义非成员函数版本运算符函数
const Rational operator*( const Rational& lhs, const Rational& rhs) {
return Rational(lhs.num*rhs.num, lhs.den*rhs.den);
} // 如果同时定义了类对象到外部类型的转换:
operator int () const { return num/den; }
// 会出现二义性

C++进阶--隐式类型转换的更多相关文章

  1. SQL进阶-隐式类型转换

    一.隐式类型转换 1.隐式类型转换 隐式类型转换: '; 程序可读性差,且依赖数据库的隐式转换规则,如果数据库升级,则程序可能无法正确执行: 有可能会导致索引失效: 有可能会导致意想不到的结果: 显式 ...

  2. js条件判断时隐式类型转换

    Javascript 中,数字 0 为假,非0 均为真 在条件判断运算 == 中的转换规则是这样的: 如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 ...

  3. dynamic_cast 和 static_cast 隐式类型转换的区别

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...

  4. c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast

    C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式 ...

  5. C++的隐式类型转换与转换操作符

    C++标准允许隐式类型转换,即对特定的类,在特定条件下,某些参数或变量将隐形转换成类对象(创建临时对象).如果这种转换代价很大(调用类的构造函数),隐式转换将影响性能.隐式转换的发生条件:函数调用中, ...

  6. C++的隐式类型转换

    C++是一种复杂的语言,其中有许多“好玩”的特性,学习C++的过程就像在海边捡一颗颗石头,只要坚持不懈,也许一颗颗小石头也能建起你自己小小的城堡. 废话完后,讲讲自己捡到的石头:隐式类型转换 学习出处 ...

  7. 「译」JavaScript 的怪癖 1:隐式类型转换

    原文:JavaScript quirk 1: implicit conversion of values 译文:「译」JavaScript 的怪癖 1:隐式类型转换 译者:justjavac 零:提要 ...

  8. 【M21】利用重载技术避免隐式类型转换

    1.考虑UPint 的加法+,UPint a, b, result; 为了使result = a+10; result= 10+a; 都能通过编译,操作符重载如下: const UPint opera ...

  9. JS--显示类型转换Number—隐式类型转换

    显示类型转换 (强制类型转换):Number()parseInt()parseFloat() Number是整体转换--能够把一个看起来像数字的字符串转成数字--尽量去转换能转的都转了 var a = ...

随机推荐

  1. display: table; 100%的宽度

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. Vue.js学习使用心得(一)

    一.初步了解 Vue.js是一套构建用户界面的渐进式框架,它只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,相当于JavaS ...

  3. Git图形化界面客户端大汇总

    文,还在不断更新,网上搜到的同名文章都是未经同意就从这里复制过去的) 一.TortoiseGit - The coolest Interface to Git Version Control Tort ...

  4. Django项目的创建和设计模式

    1.安装django pip  install  django 2.创建项目 进入到项目文件夹的根目录下 django-admin   startproject    <project_name ...

  5. while与do/while循环

    while循环1.格式:初始化条件while(循环条件){循环体迭代条件}题目:100以内偶数的输出及其和(while语句) public class V{ public static void ma ...

  6. switch语句和switch-case与if-else之间的转换

    switch语句格式:switch(变量){case 常量1:语句1;break;case 常量2:语句2;break;......default:语句;break;}特点:1.根据变量的值,选择相应 ...

  7. hdu4292 Food 最大流

    You, a part-time dining service worker in your college’s dining hall, are now confused with a new pr ...

  8. nginx-port-Permission-denied

    nginx use 9000 port Permission denied  other port ok 新架构下web服务需要使用反向代理,将不同的请求转发到不同的service,对应不同的端口. ...

  9. 解决GitHub下载速度比较慢

    第一步,打开本机上的Hosts文件 首先,什么是Hosts文件? 在互联网协议中,host表示能够同其他机器互相访问的本地计算机.一台本地机有唯一标志代码,同网络掩码一起组成IP地址,如果通过点到点协 ...

  10. 01python简介

    目录 1.  Python起源 2.  解释器 3.  Python 的设计目标 4.  Python 的设计哲学 5.  为什么选择  Python ? 6.  Python 特点 7.  Pyth ...