有时候,我们要转换为类类型和类类型,同时,这两个类继承关系不存在,这时候我们就需要一些所谓的转换操作符运营商.

一个简单的例子.类别A转换为int种类

#include <iostream> 

#include <string> 

using namespace std; 

class A{ 

private: 

int n; 

string str; 

public: 

A(int m,string s):n(m),str(s){ 



}; 

int main(){ 

A a(10,"hello"); 

int m=a; 

cout<<"m="<<m<<endl; 

//string s=a; 

//cout<<"s="<<s<<endl; 

 

}

编译结果





可能你想将其强制转换.比如

int m=(int)a;

结果还是不行,由于编译器依旧不知道应该怎么转换.





这时候,就须要转换运算符了.

这个转换运算符的类型例如以下:

operator int ()const{

return n;

}

函数名为operator int ,这个函数是没有返回类型的,由于返回类型是通过运算符的名称确定的:int

同一时候应声明为const,由于不会改动被调用的对象.

整个程序例如以下:

#include <iostream> 

#include <string> 

using namespace std; 

class A{ 

private: 

int n; 

string str; 

public: 

A(int m,string s):n(m),str(s){ 



operator int ()const{ 

return n; 



operator string()const{ 

return str; 



}; 

int main(){ 

A a(10,"hello"); 

int m=a; 

cout<<"m="<<m<<endl; 

string s=a; 

cout<<"s="<<s<<endl; 

 

}

执行结果:

类类型转换为基本类型是这样,相同,转换为其它类类型也是相同的道理.

#include <iostream> 

#include <string> 

using namespace std; 

class A{ 

private: 

int n; 

string str; 

public: 

A(int m,string s):n(m),str(s){ 



A(string s){ 

str=s+" is called!"; 



operator int ()const{ 

return n; 



operator string()const{ 

return str; 



void show()const{ 

cout<<"str="<<str<<endl; 



}; 

class B{ 

private: 

string s; 

public: 

B(string str):s(str){ 



operator A()const{ 

return s; 







}; 

int main(){ 

 

B b("this is b "); 

A a=b; 

a.show(); 

 

}

结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE4NDQzNTIxNTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">



这项,我们将不能够继承的类相同链上被转换!

版权声明:本文博主原创文章,博客,未经同意不得转载。

C++学习笔记33 转换操作符的更多相关文章

  1. python3.4学习笔记(十) 常用操作符,条件分支和循环实例

    python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...

  2. [原创]java WEB学习笔记33:Session 案例 之 购物车

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. matlab学习笔记10_2 一般操作符

    一起来学matlab-matlab学习笔记10 10_2一般操作符和数据显示格式 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德 ...

  4. C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象

    重载操作符与转换 --调用操作符和函数对象 引言: 能够为类类型的对象重载函数调用操作符:一般为表示操作的类重载调用操作符! struct absInt { int operator() (int v ...

  5. C++ Primer 学习笔记_60_重载操作符与转换 --赋值、下标、成员訪问操作符

    重载操作符与转换 --赋值.下标.成员訪问操作符 一.赋值操作符 类赋值操作符接受类类型形參,通常该形參是对类类型的const引用,但也能够是类类型或对类类型的非const引用.假设未定义这个操作符, ...

  6. C++ Primer 学习笔记_61_重载操作符与转换 --自增/自减操作符

    重载操作符与转换 --自增/自减操作符 引言: 自增,自减操作符常常由诸如迭代器这种类实现,这种类提供相似于指针的行为来訪问序列中的元素.比如,能够定义一个类,该类指向一个数组并为该数组中的元素提供訪 ...

  7. python学习笔记七--数据操作符的优先级

    一.混合表达式哪个部分先计算: 1. 取决于操作符的优先级,不同操作符的优先级是不一样的,例如‘*’的优先级高于‘+’ 2. 上节的表格里越靠后,优先级越高. 3 . 同一表达式的相同操作符是按从左到 ...

  8. Linux下汇编语言学习笔记33 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  9. Javascript学习笔记-基本概念-操作符

    1.一元操作符 (1)递增和递减操作符 只能操作一个值的操作符叫一元操作符. var age = 29; ++age; var age = 29; --age; var age = 29; var a ...

随机推荐

  1. codeforces584B Kolya and Tanya

    题目链接:http://codeforces.com/problemset/problem/584/B 解题思路:当n=1时,_______    _______   ______  三个数每位上可以 ...

  2. UIButton return(textField textView)

    首先设置TextField 或 TextView的 delegate /////UITextView - (BOOL)textView:(UITextView *)textView shouldCha ...

  3. 关于hibernate中多对多关系

    关于多对多关系 数据库:在使用多对多的关系时,我们能够使用复合主键.也能够不使用,直接引入外键相同能够实现. 在数据库中使用多对多关系时,须要一个中间表. 多对多关系中的数据库结构例如以下: 表:Or ...

  4. 它们的定义iOS双击Home截图按键开关

    <pre name="code" class="objc"><p>双击假设Home,我会去iOS App的switcher页面,这里列出 ...

  5. SQL Server Database 维护计划创建一个完整的备份策略

     SQL Server维护计划Maintenance Plan这是一个非常有用的维护工具,能够完成大部分的数据库维护任务,通过这些功能包.您可以省略大量的编码时间. 介绍的不是非常多,特此补上一篇 ...

  6. 第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍

    参考:http://developer.android.com/guide/components/tasks-and-back-stack.html 在Android中,一个应用程序里面,通常包含了多 ...

  7. android 在特殊应用的特殊功能,以帮助通信系统的问题

    在实际工程中的应用,进入一个特殊的应用后,系统的某个功能不能起作用. 当然,这个通信有非常多办法能够做到.笔者能够想到的至少有例如以下几种 1.利用property熟悉来实现,这种话须要添加一个特殊的 ...

  8. hdu1828(线段树——矩形周长并)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1828 分析:与面积不同的地方是还要记录竖的边有几个(num记录),并且当边界重合的时候需要合并(用lb ...

  9. android File文件的读写操作

    本程序实现两个文本框和两个按钮,其中一个文本框和一个按钮用于读取文件内容.另一个文本框和另一个按钮用于写入. java代码: package com.example.activity; import ...

  10. PSU 离11.2.0.3.0 -&gt; 11.2.0.3.11 如果解决冲突的整个

    Oracle rdbms 扑灭psu离11.2.0.3.0升级到11.2.0.3.11 参考patch :18522512 停止应用,停止听音乐并DB,将db的oracle_home在下面OPatch ...