注:本文测试实例使用的编译器版本为clang-703.0.29。

我们已经习惯了基本数据类型的显式或隐示转换,如:

int a = ;
float f = (float)a;
float c = a;

其实通过operator的使用,class也可以达到任意类型的显式或隐式转换的效果,如:

#include <cstdlib>
#include <cstdio>
using namespace std; struct A {
char a;
}; class B {
public:
char b;
}; class C {
private:
A _a;
B _b;
public:
char c;
operator A() {
return _a;
}
operator B() {
return _b;
}
}; int main() {
C c;
c.c = 'c';
A a1 = (A)c;
A a2 = c;
B b1 = (B)c;
B b2 = c;
a1.a = 'a';
a2.a = 'a';
b1.b = 'b';
b2.b = 'b';
printf("a1.a: %c\na2.a: %c\nb1.b: %c\nb2.b: %c\nc.c: %c\n", a1.a, a2.a, b1.b, b2.b, c.c);
return ;
}

上面这段小程序的输出结果为:

a1.a: a
a2.a: a
b1.b: b
b2.b: b
c.c: c

C++中class的类型转换重载的更多相关文章

  1. C#中如何利用操作符重载和转换操作符

    操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...

  2. C#中的强制类型转换与as转换的区别

    C#中的强制类型转换 例如有ClassA与ClassB两个类创建两个类的对象进行转换 1 2 ClassA a = new ClassA();  ClassB b = new ClassB(); 如果 ...

  3. C#中如何利用操作符重载和转换操作符 (转载)

    操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...

  4. C++中的新型类型转换

    1,C 语言中已经有类型之间的强制转换,C++ 做了改善: 2,C 方式的强制类型转换: 1,(Type) (Expression): 2,Type (Expression): 1,这种方式和上述方式 ...

  5. 关于Java中的基本数据类型转换

    Java中的基本类型有四种,其中整型分为byte.short.int.long,浮点型分为float.double,字符型char,布尔型boolean.8种类型的级别由低到高byte->sho ...

  6. 在 lua 中实现函数的重载

    在 lua 中实现函数的重载.注:好吧,lua中原来可以实现重载...local function create() local arg_table = {} local function dispa ...

  7. [转]C++中四种类型转换符的总结

    C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression)    reinterpret_cast操 ...

  8. C++中复制构造函数与重载赋值操作符总结

    前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...

  9. c++中的隐藏、重载、覆盖(重写)

    转自c++中的隐藏.重载.覆盖(重写) 1 重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual关键字可有可无. 覆盖是 ...

随机推荐

  1. PriorityQueue源码分析

          PriorityQueue其实是一个优先队列,和先进先出(FIFO)的队列的区别在于,优先队列每次出队的元素都是优先级最高的元素.那么怎么确定哪一个元素的优先级最高呢,jdk中使用堆这么一 ...

  2. 一个CTO谈自己的技术架构体系

    理解算法背后的世界观 我比较擅长的领域可能是数据和架构两个方面吧. 大数据方面就是数据挖掘.数据分析等领域,我现在带着极光推送整个的数据团队,需要把握数据团队的技术方向,还需要做很多算法方面的研究. ...

  3. [program]编程习惯总结(2015_11_25)

    1. 前端页面不要的数据,那么后端就不要发送到前端: 如:我们根据各个大洲来建立了一个个大洲的讨论区,但是在发表讨论页面.我们却希望用户去选择与当前帖子相关的国家标签. 那么,我们只需要在后台使用国家 ...

  4. SQL Server 索引基本概念与优化

    数据页和区 页 SQL Server 中的数据以“页”(Page)的形式保存数据,页是SQL Server 的IO单位,读/写一次至少是一页.一页为8K(8192byte). 页由三部分组成,页头,数 ...

  5. Centos 7 安装 FFmpeg

    Step 1: Update the system sudo yum install epel-release -y sudo yum update -y sudo shutdown -r now S ...

  6. abp + angular $http + webapi 服务

    什么是angular $http服务 http是angularjs的一个核心服务,用于读取远程服务器的数据,也就是封装了浏览器原生的xhtmlrequest对象,可以直接同外部进行通信. 怎样使用an ...

  7. 关于Unity中的NavMeshAgent的remainingDistance问题

    Unity中的NavMeshAgent的remainingDistance问题 在Unity官方案例中,要让某个人物移动到某个地方,一般来说都是下面这样的代码: agent.SetDestinatio ...

  8. 用input标签 文件,多文件上传

    单个文件,多个文件区别不大,只是需要把多个文件装在一个容器里面,循环遍历即可: 需要注意的 input 标签中name属性,一定要指定: 在这是  fileBase  需要确定method必须是pos ...

  9. 创建自己的Code Snippet(代码模板)

    一.名词解释 Code Snippet,代码模板,是一种快速生成代码的快捷方式,使用它可以有效地提高编程效率. 编程中可以使用Visual Studio提供的预先设置好的Code Snippet,也可 ...

  10. openstack 创建虚拟机的时候报错: Failed to allocate the network(s), not rescheduling.].

    错误: 实例 "test-gtj" 执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: Build of instance 5ea8c935-ee07-4788-823 ...