C++中重载数组下标访问操作符[ ] 和 赋值操作符 = ,* 和 -> 操作符和取反 !以及转化操作符bool和void*
来源:互联网 发布:牌匾设计软件 编辑:程序博客网 时间:2024/06/11 05:26
#include<iostream>
#include<exception>
using namespace std;
#include<vector>
#include<fstream>
#include<sstream>
#include<new>
class Array
{
public:
Array();
Array(const Array& src);
virtual ~Array();
virtual Array & operator =(const Array & rValue);
virtual int & operator [](int index);
virtual int &operator*();
//virtual const string &operator*()const;//const version
virtual Array* operator->();
virtual operator void *()const;//convert Object to pointer;
virtual operator bool()const;//convert Object to bool;
virtual bool operator !()const;
virtual void test()
{
cout<<"to test operator->()"<<endl;
}
protected:
int *mArray;
int mSize;
string mMsg;
const static int defaultSize=10;
};
Array::Array():mSize(defaultSize)
{
mMsg=" ";
try{
mArray=new int[mSize];
}catch(bad_alloc &e)
{
cerr<<"allocate memery failed!"<<endl;
exit(1);
}
catch(...)
{
cerr<<"other exception!"<<endl;
exit(1);
}
}
Array::~Array()
{
delete [] mArray;
}
Array::Array(const Array& src)
{ int i;
mSize=src.mSize;
mMsg=src.mMsg;
mArray=new int [mSize];
for( i=0;i<mSize;i++)
{
mArray[i]=src.mArray[i];
}
}
Array & Array::operator =(const Array & rValue)
{ if(this!=&rValue)
{
int i;
mSize=rValue.mSize;mMsg=rValue.mMsg;
delete []mArray;
mArray=new int [mSize];
for(i=0;i<mSize;i++)
{
mArray[i]=rValue.mArray[i];
}
}
return (*this);
}
int & Array::operator[](int index)
{
return mArray[index];
}
int & Array::operator*()
{
return (*mArray);
}
Array * Array::operator->()
{
return (this);
}
Array::operator void *()const
{
return mArray;
}
Array::operator bool()const
{
return (mArray!=NULL);
}
bool Array::operator !()const
{
return (mArray!=NULL?true:false);
}
void main()
{
Array object;
int i;
for(i=0;i<10;i++)
{
object[i]=i;
}
for(i=0;i<10;i++)
{
cout<<object[i]<<" ";
}
cout<<endl;
*object=123;
cout<<*object<<endl;
object->test();
//在没有重载bool和void*转化操作符下面的对对象的操作是不能编译通过的随便哪一个版本都能让下面的代码编译通过
if(object!=NULL)
{
cout<<"not null"<<endl;
}
if(object)
{
cout<<"not null"<<endl;
}
//重载!操作符
if(!object)
{
cout<<"not object"<<endl;
}else
{
cout<<"created object"<<endl;
}
}
- C++中重载数组下标访问操作符[ ] 和 赋值操作符 = ,* 和 -> 操作符和取反 !以及转化操作符bool和void*
- 赋值运算符和操作符重载
- 重载操作符>> 和 <<
- C++_指针悬挂和赋值操作符的重载
- C++_指针悬挂和赋值操作符的重载
- C++_指针悬挂和赋值操作符的重载
- 拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载
- 拷贝构造函数和重载"="赋值操作符
- 类中友元函数 、重载操作符 和 数组
- 重载下标操作符 []
- 类型转换和操作符重载 (c#)
- 【C++】重载“<<"操作符和关键字static!!!
- 不要重载&& ||和,操作符
- 模板类中重载<<和>>操作符
- 模板类中重载<<和>>操作符
- 模板类中重载<<和>>操作符
- 模板类中重载<<和>>操作符
- 模板类中重载<<和>>操作符
- 多信息显示-ExpandableListView的使用
- fork in Python
- JavaScript面向对象程序设计
- C# 如何让任务栏上的窗口闪动起来
- 解析单例模式(1)
- C++中重载数组下标访问操作符[ ] 和 赋值操作符 = ,* 和 -> 操作符和取反 !以及转化操作符bool和void*
- Android 应用APP界面设计思路
- android-隐藏或显示软键盘
- ubuntu下安装配置 ACE-5.7.8
- Mac OS X 10.8.1 Mountain Lion中svn命令缺失导致Xcode的SVN不能配置的解决办法
- RDLC 设置表的重复标题行(在每页中显示标题行)
- Linux的cpufreq(动态变频)技术
- 用 PHP 读取文件的正确方法
- js 定时器的用法