浅谈C++类型转化(运算符重载函数)和基本运算符重载(自增自减)

 更新时间:2017年06月10日 09:07:35   投稿:jingxian  
下面小编就为大家带来一篇浅谈C++类型转化(运算符重载函数)和基本运算符重载(自增自减)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

类型转化(运算符重载函数)

用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。在C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。

类型转换函数的一般形式为:

operator 类型名( ){
  实现转换的语句
}

下面是简单实现。这时候,Base起了两方面的作用:类和数据类型。系统会在需要的时候自动调用对应的类方法。

#include <iostream>
using namespace std;

class Base{
  private:
    float x;
    int y;
  public:
    Base (float xx=0,int yy=0){
      x = xx;
      y = yy;
    }
    operator float (){
      return x;
    }
    operator int (){
      return y;
    }
    void display(){
      cout<<"x is :"<<x<<";y is :"<<y<<endl;
    }
};

int main()
{
  Base base(1.0,2);
  base.display();
  int y= base;
  float x= base;
  cout<<"NewX is :"<<x<<"NewY is:"<<y<<endl;
  return 0;
}

基本运算符重载(自增自减)

主要总结 自增自减的前置和后置的用法。其他的加减乘除较简单。

简单的代码实现(纯语法)

#include <iostream>
using namespace std;

class Base{
  private:
    float x;
    int y;
  public:
    Base (float xx=0,int yy=0){
      x = xx;
      y = yy;
    }
    operator float (){
      return x;
    }
    operator int (){
      return y;
    }
    Base operator ++(){//前置 ++
      x++;
      y++;
      return *this;
    } 
    Base operator --(){
      x--;
      y--;
      return *this;
    }
    Base operator ++(int ){//后置 ++
      Base temp = *this;
      ++(*this);
      return temp;
    }
    Base operator --(int ){
      Base temp = *this;
      --(*this);
      return temp;
    }
    void display(){
      cout<<"x is :"<<x<<";y is :"<<y<<endl;
    }
    
};

int main()
{
  Base base(1.0,1);
  Base tem = base++;
  base.display();
  tem.display(); 
  
  Base base2(1.0,1);
  tem = ++base2;
  base.display();
  tem.display(); 
  return 0;
}

发现:

后置和前置的区别是有无int参数。

后置需要申请新的空间,大小是类的大小。所以,后置操作会有额外的时间空间开销。

尽量使用前置操作:如:for (int i=0;i<n;++i)

以上这篇浅谈C++类型转化(运算符重载函数)和基本运算符重载(自增自减)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C语言中0、‘\0‘、‘0‘、NULL以及类型转化

    C语言中0、‘\0‘、‘0‘、NULL以及类型转化

    在C语言中, NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,下面这篇文章主要给大家介绍了关于C语言中0、‘\0‘、‘0‘、NULL以及类型转化的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • C++/Php/Python/Shell 程序按行读取文件或者控制台的实现

    C++/Php/Python/Shell 程序按行读取文件或者控制台的实现

    下面小编就为大家带来一篇C++/Php/Python/Shell 程序按行读取文件或者控制台的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • C++中vector的实现方法示例详解

    C++中vector的实现方法示例详解

    这篇文章主要介绍了C++中vector实现的相关资料,vector是C++中重要的容器之一,底层通过三个迭代器实现,分别是_start, _finish, 和_end_of_storage,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 一篇文章带你了解C语言内存对齐公式

    一篇文章带你了解C语言内存对齐公式

    这篇文章主要介绍了C语言内存对齐,包括内存对其的基本概念及用法,以及注意事项,并以实例形式加以说明,需要的朋友可以参考下,希望能给你带来帮助
    2021-08-08
  • vc++ 监控指定路径下文件变化实现代码

    vc++ 监控指定路径下文件变化实现代码

    这篇文章主要介绍了vc++ 监控指定路径下文件变化实现代码,需要的朋友可以参考下
    2019-04-04
  • 数组名不等于指针 sizeof()函数求数组大小错误问题及解决

    数组名不等于指针 sizeof()函数求数组大小错误问题及解决

    这篇文章主要介绍了数组名不等于指针 sizeof()函数求数组大小错误问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Qt5.9画五角星的方法

    Qt5.9画五角星的方法

    这篇文章主要为大家详细介绍了Qt5.9画五角星的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C++ LeetCode1781题解所有子字符串美丽值之和

    C++ LeetCode1781题解所有子字符串美丽值之和

    这篇文章主要为大家介绍了C++ LeetCode1781题解所有子字符串美丽值之和,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Linux下使用C/C++进行UDP网络编程详解

    Linux下使用C/C++进行UDP网络编程详解

    UDP 是User Datagram Protocol 的简称,中文名是用户数据报协议,是一种无连接、不可靠的协议,本文主要介绍了如何在Linux下使用C/C++进行UDP网络编程,有需要的可以了解下
    2024-10-10
  • Qt6.3 + Clion +MSVC2019环境配置详解

    Qt6.3 + Clion +MSVC2019环境配置详解

    本文主要介绍了Qt6.3 + Clion +MSVC2019环境配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论