自动类型转换之运算符重载

第二种自动类型转换的方法是运算符重载,其是形式是operator 目的类型();   这个函数通过在关键字operator后跟随想要转换到的类型的方法,将当前类型转换为希望的类型。这种形式的运算符重载是独特的,因为没有指定返回值类型,其返回值类型就是正在重载运算符的名字。

 1 #include<iostream>
 2 using namespace std;
 3
 4 class Three{
 5     int i;
 6 public:
 7     Three(int ii=0) :i(ii){
 8
 9     }
10
11 };
12
13 class Four{
14     int x;
15 public:
16     Four(int xx) :x(xx){
17
18     }
19     operator Three()const{//重载的运算符,功能是把类Four的对象转换成Three的对象。
20         return Three(x);
21     }
22 };
23
24
25 void g(Three){
26
27 }
28
29 int main(){
30     Four four(1);
31     g(four);//调用类型转换运算符,operator Three()const {return Three(x);}
32     g(1);//调用类型转换构造函数Three(int ii=0)
33 }

在自动类型转换技术中,构造函数技术是目的类执行转换,然而使用运算符技术,是源类执行转换。构造函数技术有一个缺陷就是无法从用户自定义的类型转换到内置类型,从用户自定义类型到内置类型的转换只有运算符重载可能做到。

时间: 2024-10-06 04:08:19

自动类型转换之运算符重载的相关文章

自增自减运算符的重载(强制类型转换运算符重载)

前置运算符重载为一元运算符,后置运算符重载为二元运算符. Operator int() { return n; } int作为一个强制类型转换运算符被重载, Demo s; (int)s;       //等效于s.int(): 强制类型转换运算符重载时, 不能写返回值类型 实际上其返回值类型----强制类型转换运算符代表的类型 只能作为成员函数,不能作为友元函数或普通函数 转换构造函数和类型转换运算符有一个共同的功能:当需要的时候,编译系统会自动调用这些函数,建立一个无名的临时对象(或临时变量

不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自定义类型转换 示例CppOperator.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppOperator { public: string Demo(); }; } CppOperator.cpp /* * 运算符重载, 自定义类型转换 */ #include &qu

C++运算符重载——类型转换

类型转换函数能够实现把一个类 类型 转换成 基本数据类型(int.float.double.char等) 或者 另一个类 类型. 其定义形式如下,注意不能有返回值,不能有参数,只能返回要转换的数据类型. class X { public: operator TYPE() { //..... return TYPE对象; } }; 例子:将一个类转换成基本数据类型和 类类型 #include <iostream> using namespace std; class Base { public:

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载、覆盖与隐藏、类型转换运算符、*运算符重载、-&gt;运算符重载

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载.覆盖与隐藏.类型转换运算符.*运算符重载.->运算符重载 一.成员函数的重载.覆盖与隐藏 对于类层次的同名成员函数来说,有三种关系:重载.覆盖和隐藏,理清3种关系,有助于写出高质量的代码. 1.成员函数的重载 重载的概念相对简单,只有在同一类定义中的同名成员函数才存在重载关系,主要特点时函数的参数类型和数目有所不同:但不能出现函数参数的个数和类型均相同,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致

自动类型转换之构造函数

在c/c++中,如果编译器看到一个表达式或函数调用使用了一个不适合的类型,它经常会执行一个自动类型转换,从现在的类型到所有要求的类型.在内置类型中我们经常看到例如: char c; int i=c; 上述语句就执行了自动类型转换.但是上面只是内置类型的自动类型转换,在c++中,还支持用户自定义的自动类型转换.有两种方法可以实习,第一种方法就是特殊类型的构造函数,第二种就是重载的运算符. 首先介绍第一种,特殊的构造函数.如果定义一个构造函数,这个构造函数把另一个类型的对象或者引用当做它的单个参数,

关于c++的运算符重载那些事

搞c++有一段时间了,今天突然要重载一个运算符,发现自己有点忘了,遂查查资料做一下c++运算符重载的小总结. 一.何为运算符重载 运算符的重载是c++语言特有的,java什么的是没有运算符重载的,所以运算符重载在笔试面试中有可能成为c++的高频考点.运算符重载就是重新定义运算符的意义,如常用的+,-,×,÷都是可以重载的.运算符重载使用的是关键字operator,表现形式是:                                                            

C++笔记(3):运算符重载

运算符重载 1.运算符重载基础 2.运算符重载的规则 3.重载双目运算符 4.重载单目运算符 5.重载流插入和提取运算符 6.类型转换 7.定义自己的string类 ------------------------------------------------------------------------------------------------------------------------------- 1.运算符重载基础 运算符重载就是对已有的运算符赋予新的含义,实现新的功能.前

《C++编程思想》 第十一章 运算符重载 (习题+解答)

一.相关代码 1. /*运算符重载语法*/ /*OPOVER.cpp*/ /*这两个重载的运算符被定义为内联成员函数.对于二元运算符,单个参数是出现在运算符 右侧的那个.当一元运算符被定义为成员函数时,没有参数.成员函数被运算符左侧的对象调 用. 对于非条件运算符(条件运算符通常返回一个布尔值),如果两个参数是相同的类型,希 望返回和运算相同类型的对象或引用.如果它们不是相同类型,它作什么样的解释就取决于程 序设计者.用这种方法可以组合复杂的表达式: K += I + J ; 运算符+号产生一个

C++ 运算符重载的注意点

运算符重载包括:双目运算符重载.单目运算符重载.流运算符重载.转换构造函数.类型转换函数 重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参表列) { // 对运算符的重载处理 } 1. 双目运算符重载 双目:有2个操作数的运算符 重载函数可以为类成员函数或者是类的友元函数: - 当是成员函数时,有一个隐藏参数(当前类),因此只有一个显示参数:如 Complex operator+(const Complex &b); Complex operator+(const