以下示例中定义了一个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;
}
分享到:
相关推荐
operator new/delete重载的示例代码。 深度说明了C++类的构造函数、析构函数与operator new、delete之间的关系,相关文章:http://blog.csdn.net/kakaying/archive/2009/08/30/4498563.aspx
【原书名】 C++ Primer (4th Edition) 【原出版社】 Addison Wesley/Pearson 【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo 【译者】 李师贤 蒋爱军 梅晓勇 林瑛 【丛书名】 图灵计算机科学丛书 ...
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++ 里面,运算符重载可以写在类的外面,当 intellisense 不工作的时候,找到一个运算符的重载函数是一件相当头疼的事情。这个问题在 C# 中改善了不少,因为运算符重载一定要写在类内,而且 intellisense 很强大...
重载 operator new 和 operator delete 内存管理 其他一切都应该与初始版本一起使用。 示例代码 以下几行指示使用指针生成的代码是什么样的。 // Test plain assignment... f[ 4 ] = 111 ; *f = 112 ; (((*(f + 2 ))...
下面是模拟实现字符串的相关功能,它包括一下功能: String(const char * s);//利用字符串来初始化对象 String(); //默认构造函数 ...//重载=运算符。 String & operator=(const char *); char & operator[](in
5、示例:下面有一段伪代码演示如何在窗口过程中处理消息 LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM) { switch(uMessageType) { //使用SWITCH语句将各种消息分开 case(WM_PAINT): ...
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 排序...
7.8.3 重载operator 7.8.4 使用“*”解引用指针 7.8.5 重载类型转换操作符 7.8.6 随处可见的隐式类型转换 7.8.7 双向隐式类型转换会导致歧义 7.8.8 指针减法是合法的 7.9 排序算法的...
你可以通过 operator[] 来实现 这个功鞥.你可以同过方括号来指定策略,例如: int ret = call_function( L , "a_lua_function" , new complex_class() )[ adopt(_1) ]; 如果你想通过引用方式传递参数,你必须用Boost....
在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工的、半手工的以及自动的内存管理实践的基本概念。 追溯到在 Apple II 上进行汇编语言编程的时代,那时内存管理还不是个大问题。您实际上在...
要试着运行这些示例,需要先复制本代码清单,并将其粘贴到一个名为 malloc.c 的文件中。接下来,我将一次一个部分地对该清单进行解释。 在大部分操作系统中,内存分配由以下两个简单的函数来处理: void *...