GeekBand C++ 面向对象高级编程(下) 第三周笔记

  第三周的部分感觉相对繁杂,函数模板方面零零散散,所以这次的笔记就围绕转换函数来整理。整理内容来源于脚本之家。

  类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义的体内声明,在保留字operator之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中一个非静态成员函数。

  定义格式:

 class <类型说明符1>
    {
     public:
      operator <类型说明符2>();
      …
    }

  这个转换函数定义了由类型说明符1到类型说明符2之间的映射关系。

  转换函数是用来将一种类型的数据类型转换成另一种类型。

  operator用于类型转换函数:

  转换函数特质:

  1.类型转换函数定义在源类中。

  2.需要用operator修饰,函数名称是目标类型名后目标类名。

  3.函数没有参数,没有返回值,但是有return语句,在return语句中返回目标类型数据或调用目标类的构造函数。

  类型转换函数主要有两类;

  1.对象向基本数据类型转换(例):

#include<iostream>
#include<string>
using namespace std;
class D{
public:
 D(double d):d_(d) {}
 operator int() const{
  std::cout<<"(int)d called!"<<std::endl;
  return static_cast<int>(d_);
 }
private:
 double d_;
};
int add(int a,int b){
 return a+b;
}
int main(){
 D d1=1.1;
 D d2=2.2;
 std::cout<<add(d1,d2)<<std::endl;
 system("pause");
 return 0;
}
  输出结果为:

<int>d called!
<int>d called!
3
  可见在add(d1,d2)函数调用时隐性的调用了operator int()const函数。

  2.对象向不同类的对象转换(例):

#include<iostream>
class X;
class A
{
public:
 A(int num=0):dat(num) {}
    A(const X& rhs):dat(rhs) {}
 operator int() {return dat;}
private:
 int dat;
};
class X
{
public:
 X(int num=0):dat(num) {}
 operator int() {return dat;}
 operator A(){
  A temp=dat;
  return temp;
 }
private:
 int dat;
};
int main()
{
  X stuff=37;
  A more=0;
  int hold;
  hold=stuff;
  std::cout<<hold<<std::endl;
  more=stuff;
  std::cout<<more<<std::endl;
  return 0;
}
  程序中的X通过“operator A()”类型转换来实现将X类型对象转换成A类型。

  operator用于操作符重载:

  操作符重载将现有操作符与一个成员函数相关联,并将该操作符与其他成员对象一起使用。

  需要注意的是,重载不能改变操作符的基本功能,一级该操作符的优先级顺序。不应改变操作符的本来含义,且只能对已有的操作符进行重载,而不能重载新符号。操作符重载只对类可用。以下运算符不能被重载:

. 原点操作符(成员访问符)
* 指向成员的指针
:: 作用域解析符
? : 问号条件运算符
sizeof 操作数的字节数


  


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值