C++运算符重载转换运算符

为什么需要转换运算符?

大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能。

转换运算符的生命方式比较特别,方法如下:

operator 类名();

转换运算符的重载函数是没有返回类型的,它和类的构造函数,析构函数一样是不遵循函数有返回类型的规定的,他们都没有返回值。

下面我看一个例子,看看它是如何工作的:

//例1

//程序作者:管宁//站点:www.cndev-lab.com//所有稿件均有版权,如要转载,请务必著名出处和作者#include <iostream>using namespace std;class Test{    public:        Test(int a = 0)        {            cout<<this<<":"<<"载入构造函数!"<<a<<endl;            Test::a = a;        }        Test(Test &temp)        {            cout<<"载入拷贝构造函数!"<<endl;            Test::a = temp.a;        }        ~Test()        {            cout<<this<<":"<<"载入析构函数!"<<this->a<<endl;            cin.get();        }        operator int()//转换运算符        {            cout<<this<<":"<<"载入转换运算符函数!"<<this->a<<endl;            return Test::a;        }    public:        int a;};int main(){    Test b(99);    cout<<"b的内存地址"<<&b<<endl;    cout<<(int)b<<endl;//强转换    system("pause");}

在例子中我们利用转换运算符将Test类的对象强转换成了int类型并输出,注意观察转换运算符函数的运行状态,发现并没有产生临时对象,证明了它与普通函数并不相同,虽然它带有return语句。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 对象
, 函数
, 运算符重载
, 类型
, 运算符
, 重载c++位运算link
, 运算类
, C++位运算符
作者
类型转换运算符重载、c 运算符重载、c 运算符重载 等号、c 结构体运算符重载、c 关系运算符重载,以便于您获取更多的相关知识。

时间: 2024-08-04 06:24:08

C++运算符重载转换运算符的相关文章

多项式 运算符重载-利用运算符重载 定义多项式加法 返回值出错

问题描述 利用运算符重载 定义多项式加法 返回值出错 class Poly{ int n; public: int *a; Poly(){} Poly(int) { cout<<""请输入多项式的次数:""; cin>>n; a =new int [n+1]; cout<<""请依次输入各项系数 不存在该次项则输入0 最高项系数不得为0""< for(int i=0;i { cout

C++运算符重载赋值运算符

自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数. 赋值运算符重载函数的定义与其它运算符重载函数的定义是差不多的. 下面我们以实例说明如何使用它,代码如下: //程序作者:管宁//站点:www.cndev-lab.com//所有稿件均有版权,如要转载,请务必著名出处和作者#include <iostr

C++运算符重载函数基础及其值返回状态

运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的. 例子如下: class Test{ //过程省略}int main(){ Test a,c; c=a+a;} 当然这样的代码是不能够通过编译的,c++对自定类的算术运算部分保留给了程序员,这也是符合c++灵活特性的. 在c++中要想实现这样的

C++递增(增量)运算符重载的思考

在前面的章节中我们已经接触过递增运算符的重载,那时候我们并没有区分前递增与后递增的差别,在通常情况下我们是分别不出++a与a++的差别的,但的确他们直接是存在明显差别的. 先看如下代码: #include <iostream>using namespace std; int main(){ int a=0; ++(++a);//正确,(++a)返回的是左值 (a++)++;//错误,(a++)返回的不是左值 system("pause");} 代码中(a++)++编译出错误

C++中利用构造函数与无名对象简化运算符重载函数

在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁//站点:www.cndev-lab.com//所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream>using namespace std; class Test{ public: Test(int a) { Test::a = a; } friend Test operator + (Test&,int); public: int a

【C++】C++运算符重载-基础

本篇博客讲解: 运算符重载基础,以及实例 运算符重载基础 运算符重载就是对已有的运算符赋予新的含义,实现新的功能. 运算符重载,如"+",它可以对int.float.string类型进行加法运算. "<<"是C++中的左移运算符,但是在输出操作中与cout配合被称为流插入运算符,可以进行输出. ">>"是右移运算符,与cin配合使用被称为流提取运算符. 它们都被称为运算符重载. 我们也可以根据我们的需要对C++中现有的运算

C++运算符重载

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.例如:  class complex  {   public:    complex(double r=0.0,double I=0.0){real=r;imag=I;}    void display();   private:    double real;    double imag;  };  complex a(10,20),b(5,8);  "a+b"运算如何实现?

手工打造运算符重载过程

除了J#外,所有微软支持的.NET开发语言现在均支持运算符重载,因此纯粹为C#简化写法一样特性现已成为一种.NET开发中值得研究的一项重要语言特性.有人认为运算符重载其实就是简化写法,满足模拟基本类型操作的小功能,没有必要深究.但我觉得要多思考一层,为什么我们总希望模拟基本类型的操作?因为运算符重载能够将操作中缀化,能够自动推测静态过程的主体. 首先是操作中缀化.函数调用其实是一种前缀操作,函数(代表操作)总是在参数(代表操作数)之前写出.这样执行序列操作时运行的顺序其实和书写的顺序相反: H(

《21天学通C++(第7版)》——第12章 运算符类型与运算符重载

第12章 运算符类型与运算符重载 21天学通C++(第7版) 关键字class让您不仅能够封装数据和方法,还能封装运算符,以简化对对象执行的操作.通过使用这些运算符,可以像第5章处理整数那样,对对象执行赋值或加法运算.与函数一样,运算符也可以重载. 在本章中,您将学习: 使用关键字operator: 单目运算符与双目运算符: 转换运算符: C++11新增的移动复制运算符: 不能重新定义的运算符. 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.