`
king_tt
  • 浏览: 2124093 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C++重载operator的示例

 
阅读更多
以下示例中定义了一个class test, 重载了<, +, +=, =, ==, <<, >>等符号:

#include<iostream>
#include<vector>
using namespace std;

class test{
public:
     int v;
   /*构造函数*/
     test():v(0){}
     test(const int &a):v(a){}
     test(const test &t1):v(t1.v){} 
    
   /*以下重载小于号 < */
     //比较两个对象的大小 
     bool operator<(const test &t1) const{ 
         return (v < t1.v);
     }
     //比较对象和int的大小 
     bool operator<(const int &t1) const{ 
         return (v < t1);
     }
     //友元函数,比较int和对象的大小 
     friend inline bool operator<(const int &a, const test & t1){
         return (a < t1.v);
     }
    
   /*以下重载赋值号 = */
     //对象间赋值 
     test & operator=(const test &t1){
         v = t1.v;
         return *this;
     }
     //int赋值给对象 
     test & operator=(const int &t1){
         v = t1;
         return *this;
     }
    
   /*以下重载加号 + */
     //对象加上 int 
     test operator+(const int & a){
         test t1;
         t1.v = v + a;
         return t1;
     }
     //对象加对象 
     test operator+(test &t1){
         test t2;
         t2.v = v + t1.v;
         return t2;
     }
    
   /*以下重载加等号 += */  
     //对象加上对象 
     test &operator+=(const test &t1){
         v += t1.v;
         return *this;
     }  
     //对象加上int
     test &operator+=(const int &a){
         v += a;
         return *this;
     }

   /*以下重载双等号 == */  
     //对象==对象 
     bool operator==(const test &t1)const{
         return (v == t1.v);
     }  
     //对象==int
     bool operator==(const int &t1)const{
         return (v == t1);
     }  
    
   /*以下重载 输入>> 输出<< */
     /*友元函数,输出对象*/
     friend inline ostream & operator << (ostream & os, test &t1){
         cout << "class t(" << t1.v << ")" << endl;
         return os;
     }
     /*友元函数,输入对象*/
     friend inline istream & operator >> (istream & is, test &t1){
         cin >> t1.v;
         return is;
     }
};

int main(){
     test t0, t1(3);
     test t2(t1);
     cout << t0 << t1 << t2;
     cin >> t1;
     t2 = t1;
     t2 += t1;
     t1 += 10;
     cout << t2;
     if(t1 < t2) cout << "t1 < t2"; 
     else if(t1 == t2) cout << "t1 = t2";
     else /* t1 > t2*/ cout << "t1 > t2"; 
     cout <<endl;
     system("pause");
     return 0;
}


分享到:
评论

相关推荐

    C++内存泄露检测代码

    operator new/delete重载的示例代码。 深度说明了C++类的构造函数、析构函数与operator new、delete之间的关系,相关文章:http://blog.csdn.net/kakaying/archive/2009/08/30/4498563.aspx

    C++ Primer第四版【中文高清扫描版】.pdf

    【原书名】 C++ Primer (4th Edition) 【原出版社】 Addison Wesley/Pearson 【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo 【译者】 李师贤 蒋爱军 梅晓勇 林瑛 【丛书名】 图灵计算机科学丛书 ...

    开学了,有路网团购太便宜啦! C++编程惯用法(高级程序员常用方法和技巧)/深入C++系列(C++ Strategies and Tactics)

    9.5 传递参数给operator new 9.6 管理外部资源 9.7 寻找有关内存的bug 9.8 名字冲突 9.9 性能 9.10 不要去猜想,而应该度量! 9.11 算法 9.12 动态内存分配中的瓶颈 9.13 内嵌 9.14 Tiemann法则 9.15 小结 9.16 问题...

    C#中重载相等(==)运算符示例

    在 C++ 里面,运算符重载可以写在类的外面,当 intellisense 不工作的时候,找到一个运算符的重载函数是一件相当头疼的事情。这个问题在 C# 中改善了不少,因为运算符重载一定要写在类内,而且 intellisense 很强大...

    失物招领平台源码java-cpp-to-java-source-converter:将C++转换为Java的翻译器。正在进行中的工作

    重载 operator new 和 operator delete 内存管理 其他一切都应该与初始版本一起使用。 示例代码 以下几行指示使用指针生成的代码是什么样的。 // Test plain assignment... f[ 4 ] = 111 ; *f = 112 ; (((*(f + 2 ))...

    自己模拟写C++中的String类型实例讲解

    下面是模拟实现字符串的相关功能,它包括一下功能: String(const char * s);//利用字符串来初始化对象 String(); //默认构造函数 ...//重载=运算符。 String & operator=(const char *); char & operator[](in

    C++MFC教程

    5、示例:下面有一段伪代码演示如何在窗口过程中处理消息 LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM) { switch(uMessageType) { //使用SWITCH语句将各种消息分开 case(WM_PAINT): ...

    Operator_overloading:编写一个类来实现复数在数学中的工作方式

    Operator_overloading 编写一个类来实现复数在数学中的工作方式。 复数可以表示为a + bi ,其中a和b是实数。 您没有获得完整的Complex类: class Complex { public: Complex ():real( 0 ), ima( 0 ){}; ~Complex ();...

    数据结构与算法分析

     7.8.3 重载operator  7.8.4 使用“*”解引用指针   7.8.5 重载类型转换操作符   7.8.6 随处可见的隐式类型转换   7.8.7 双向隐式类型转换会导致歧义   7.8.8 指针减法是合法的   7.9 排序...

    数据结构与算法分析C描述第三版

     7.8.3 重载operator  7.8.4 使用“*”解引用指针   7.8.5 重载类型转换操作符   7.8.6 随处可见的隐式类型转换   7.8.7 双向隐式类型转换会导致歧义   7.8.8 指针减法是合法的   7.9 排序算法的...

    LuaBind 源码 (Lua增强库)

    你可以通过 operator[] 来实现 这个功鞥.你可以同过方括号来指定策略,例如: int ret = call_function( L , "a_lua_function" , new complex_class() )[ adopt(_1) ]; 如果你想通过引用方式传递参数,你必须用Boost....

    操作系统(内存管理)

    在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工的、半手工的以及自动的内存管理实践的基本概念。 追溯到在 Apple II 上进行汇编语言编程的时代,那时内存管理还不是个大问题。您实际上在...

    内存管理内存管理内存管理

    要试着运行这些示例,需要先复制本代码清单,并将其粘贴到一个名为 malloc.c 的文件中。接下来,我将一次一个部分地对该清单进行解释。 在大部分操作系统中,内存分配由以下两个简单的函数来处理: void *...

Global site tag (gtag.js) - Google Analytics