好久没有写blog了,今天在学习c#的时候看到某一章节 讲类的隐式与显式转换。特此留笔,以供后续参考之用。

关于显式,隐式转换有些争论,说什么不建议隐式转换。但是个人认为非必要,如果有良好的基础书写基础,那么隐式和显式转换是没有区别的,反倒是隐式转换更方便。

先说显式转换 现在有类CPoint 和类CRect;把CRect 对象强制转换为CPoint类型的对象。

实现思路是:重载CPoint的构造函数,既重载参数为CRect类型的构造参数即可,此时explicit 可有可无,但是个人建议有explicit关键字,有的话必须强转。这样能培养良好的书写规范。如CPoint obj = (CRect)rect;比CPoint obj = rect 的可读性要好。如果没有explicit关键字,则属于隐式转换了。

伪代码:explicit CPoint(const CRect& obj)这是显式强转; CPoint(const CRect& obj) 属于隐式转换的一种。个人喜欢第一种书写方式

把CRect 对象隐式转换为CPoint类型的对象。

(1) 重载CPoint的构造函数,参数为CRect类型,但是构造函数不用explicit 修饰。

(2)重载CPoint 的赋值函数,既重载=。 伪代码:CPoint& operator=(const CRect& obj);

(3)  实现普通的函数转换,函数为CPoint的成员函数或者静态函数,实现的方式多样。伪代码如:CPoint GetPointFromRect(const CRect& obj); 或者 void GetPointFromRect(CRect& obj )等。

(4)很奇特的一种。operator除了重载符号外的另一种用法,重载类别。 既operator CPoint(); 这种用法要在CRect类中实现对CPoint 的重载。

注意一个小细节,在CPoint中重载构造函数其参数为CRect的,并且在CRect 实现了operator CPoint 隐式转换。在调用时优先选用CPoint的构造函数,其次再调用CRect的对CPoint的隐式转换函数。

伪代码:

CTestRect test(2,3, 20,50);

CTestPoint obj,obj3;

obj = (CTestPoint)test; // what function?

obj3 = test;

CTestPoint obj2 = test;

C++ 不具有继承关系的类之间的显式,隐式转换 2013-07-11 15:41的更多相关文章

  1. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...

  2. IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图)

    IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图) .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...

  3. c++中的继承关系

    1 什么是继承 面向对象的继承关系指类之间的父子关系.用类图表示如下: 2 为什么要有继承?/ 继承的意义? 因为继承是面向对象中代码复用的一种手段.通过继承,可以获取父类的所有功能,也可以在子类中重 ...

  4. 类之间关系理解:组合>聚合>关联>依赖;实现,继承

    类之间关系理解:组合>聚合>关联>依赖:实现,继承 1. 从类之间的关系来看,不外乎以下几种 组合>聚合>关联>依赖:实现,继承 且可以分为以下两类: (1)实现, ...

  5. java 类与类之间的关系 及uml图

    类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(associ ...

  6. UML类图(Class Diagram)中类与类之间的关系及表示方式(转)

    源地址:https://blog.csdn.net/a19881029/article/details/8957441 ======================================== ...

  7. UML类之间的关系

    原文:http://www.cnblogs.com/me115/p/4092632.html 下面详细介绍这六种关系: 类之间的关系 泛化关系(generalization) 类的继承结构表现在UML ...

  8. python 面向对象类与类之间的关系

    主要内容: 1. 依赖关系 2. 关联关系, 组合关系, 聚合关系 3. 继承关系 4. 类中的特殊成员 引子 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类. 那 ...

  9. 类与类之间关系,用C#和JavaScript体现

    前言 在面向对象中,类之间的关系有六种,分别是: 关联关系(Association) 泛化关系(Generalization) 依赖(Dependency) 聚合(Aggregation) 组合(Co ...

随机推荐

  1. Presto性能调优的五大技巧

    概述 Presto架构 Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询. Presto的架构分为: Coodinator:解析SQL语句,生成 ...

  2. Cobbler 部署

    环境介绍 Cobbler 操作系统: Centos-7.2-x86_64 Cobbler服务器地址: 10.90.0.10 部署 Cobbler 安装 Centos epel 原 [root@node ...

  3. sql数据管理语句

    一.数据管理 1.增加数据 INSERT INTO student VALUES(1,'张三','男',20); -- 插入所有字段.一定依次按顺序插入 -- 注意不能少或多字段值 如只需要插入部分字 ...

  4. LQB2013A04倒置的标签

    这个题,一开始犯了一个很幼稚的错误 贴贴代码 #include<iostream> #include<stdio.h> #include<stdlib.h> #in ...

  5. ES6 常用语法知识汇总

    ES6模块化如何使用,开发环境如何打包? 1.模块化的基本语法 /* export 语法 */ // 默认导出 export default { a: '我是默认导出的', } // 单独导出 exp ...

  6. 自述:转职IT ,痛苦一阵子;不转职IT,痛苦一辈子(第一章)

    作为一个从后期制作转职过来的Java工程师,我认为我是幸运的,虽然我的本科专业(影视后期)也是火爆行业,不愁工作,但我不后悔进入这个IT坑,毕竟转行,只痛苦一阵子,但是不转行,可能我会痛苦一辈子. 我 ...

  7. PHP curl_share_init函数

    (PHP 5 >= 5.5.0) curl_share_init — 初始化一个 cURL 共享句柄 说明 resource curl_share_init ( void ) 允许两个 cURL ...

  8. PHP str_getcsv() 函数

    定义和用法 str_getcsv() 函数解析 CSV 格式字段的字符串,并返回一个包含所读取字段的数组. 语法 str_getcsv(string,separator,enclosure,escap ...

  9. PHP mysqli_stmt_init() 函数

    初始化声明并返回 mysqli_stmt_prepare() 使用的对象: <?php 高佣联盟 www.cgewang.com // 假定数据库用户名:root,密码:123456,数据库:R ...

  10. CF R 632 div2 1333F Kate and imperfection

    赛后看了半天题 才把题目看懂 英语水平极差. 意思:定义一个集合S的权值为max{gcd(a,b)};且\(a\neq b\) 这个集合可以从1~n中选出一些数字 求出当集合大小为k时的最小价值. 无 ...