C++运算符重载简单练习 写一个Integer包装类
来源:互联网 发布:淘宝口令在线生成器 编辑:程序博客网 时间:2024/06/07 11:17
// Operator.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>using namespace std;class Integer{public: //explicit如果添加explicit就不能进行隐式构造//隐式构造不会导致拷贝构造函数调用Integer(int num):m_num(num){}//覆盖了拷贝构造函数就必须对拷贝对象的成员进行值赋值 有必要的时候还要进行深层拷贝比如重新分配内存Integer(const Integer&integer){ m_num=integer.m_num; cout<<"CPY CONSTRUCTION FUNCTION CALLED"<<endl;}//后缀形式//如果后缀形式那么形参会是0void operator++(int i){ this->m_num=m_num+1;}//前缀形式void operator++(){this->m_num++;}//前置--void operator--(){this->m_num--;}//后缀形式void operator--(int i){this->m_num=m_num-1;}//重载+ 如果接受的不是 Integer&integerRef那么依然会触发拷贝构造函数Integer operator+(Integer &integerRef){return Integer(m_num+integerRef.m_num);}Integer operator+(int i){ return m_num+i;}Integer operator-(int i){return m_num-i;}//重载=void operator=(int i){m_num=i;}//重载+= -=void operator+=(int i){ m_num+=i;}void operator-=(int i){m_num-=i;}//返回值int ToVal(){return m_num;}//函数返回 赋值会导致拷贝构造调用Integer GetObj(){return *this;}//转换成字符串 const string ToString(){ char buf[10]=""; _itoa_s(m_num,buf,10);return string(buf) ;}//COPY MYSELF//只有返回新的对象 或者创建新的对象通过其他对象初始化的时候 才会触发拷贝构造 或者函数体内部创建一个对象并且把对象作为返回值 才会触发 拷贝构造函数调用//如果return Integer(m_num);是不会触发拷贝构造的//仿函数Integer operator()(){ return *this;}//重载 对于ios流类库的 标准输入 标准输出 标准错误输出 所以我们只能声明<< >>插入提取运算符为 友元函数friend istream& operator >>(istream&is,Integer&intObj);friend ostream& operator <<(ostream&os,Integer&intObj);//从对象提取数据到变量 << >>运算符重载void operator>>(int &i){i=m_num;}//输出到对象 void operator<<(int i){m_num=i;}private:int m_num;protected:};//重载IO istream& operator >>(istream&is,Integer&intObj){ is>>intObj.m_num; return is;}ostream& operator <<(ostream&os,Integer&intObj){os<<intObj.m_num ;return os;}int _tmain(int argc, _TCHAR* argv[]){ //implicitInteger integerObj1=1;Integer integerObj2=2;//integerObj1=integerObj2; 不会触发拷贝构造函数 Integer obj=integerObj1 才会触发拷贝构造调用//相当于integerObj++0integerObj1++;//相当于++x++integerObj1; cout<<"integerObj1="<<integerObj1.ToVal()<<endl;Integer intObjCmb=integerObj1+integerObj2;cout<<"intObjCmb="<<intObjCmb.ToVal()<<endl;Integer w=integerObj1;cout<<"w="<<w.ToString()<<endl;w+=2 ;cout<<"w+2="<<w.ToString()<<endl;cout<<"Copy W="<<w().ToString()<<endl;//重载标准输入和输出.....w=125;cout<<"W="<<w<<endl;int i;w>>i ;cout<<"i=w="<<w<<endl ;w<<1000;cout<<"w="<<w<<endl ;w>>i ;cout<<"i=w="<<w<<endl ;return 0;}
1 0
- C++运算符重载简单练习 写一个Integer包装类
- 【c++】运算符重载练习
- 运算符重载练习
- 重载运算符练习
- C++ Integer ++运算符重载
- 运算符重载简单两例(c++)
- 关于operator运算符重载,简单练习说明原理
- 运算符重载练习(一)
- 运算符的重载练习
- c++运算符重载练习
- C++运算符重载练习
- Coursera 编程题 #3 运算符重载 写一个二维数组类 Array2心得
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- ERP与易掌管MES在制造业生产管理中的联系
- Linux curl使用简单介绍
- 页面中时间范围的提醒。
- BZOJ2216【决策单调性】
- Python与Java之间的相互调用——Jython
- C++运算符重载简单练习 写一个Integer包装类
- PAT素数对猜想
- leetcode-77 Combinations
- java自学笔记————通过反射来获取注解的信息;
- Intent.ACTION_VIEW
- 深入了解Delphi 7中的四种消息框
- 运行多个tomcat实例两法
- RACLE 找回被truncate的表
- 设计包含min函数的栈(栈)