C++赋值运算符、函数调用运算符、下标运算符(“=”、“()”、“[]”)重载
来源:互联网 发布:sql exists用法 编辑:程序博客网 时间:2024/04/30 04:49
转自 http://blog.163.com/hbu_lijian/blog/static/126129153201211545633152/
//对于一般的类,如Complex类,系统会默认重载赋值运算符,但有些类对于系统默认的赋值运算符无法满足要求,这个时候就要用户自己来重载赋值运算符。另外,赋值运算符只能用成员函数重载,不能用友元函数重载。
#include <iostream>
#include <assert.h>
#include <string.h>
using namespace std;
class cstring
{
public:
cstring(char *str="");
cstring(const cstring &str);
cstring operator+(const cstring &str);
//赋值运算符只能用成员函数重载,不能被继承,用户自己不重载系统会默认冲在一个(但不一定能满足要求)
cstring &operator=(const cstring &str);
//重载函数调用运算符,只能用成员函数
int operator()();
//重载下标运算符,只能用成员函数
char operator[](int i);
void print(void);
private:
char *m_pstr;
int m_isize;
};
cstring::cstring(char *str)
{
if(str == NULL)
{
m_isize = 0;
m_pstr = NULL;
}
else
{
m_isize = strlen(str) + 1;
m_pstr = new char[m_isize + 1];
assert(m_pstr);
strcpy(m_pstr,str);
}
}
cstring::cstring(const cstring &str)
{
if(str.m_isize == 0)
{
m_isize = 0;
m_pstr = NULL;
}
else
{
m_isize = str.m_isize;
m_pstr = new char[m_isize];
assert(m_pstr);
strcpy(m_pstr,str.m_pstr);
}
}
cstring cstring::operator +(const cstring &str)
{
cstring s1;
s1.m_isize = str.m_isize + m_isize - 1;
s1.m_pstr = new char[s1.m_isize];
assert(s1.m_pstr);
strcpy(s1.m_pstr,m_pstr);
strcat(s1.m_pstr,str.m_pstr);
return s1;
}
cstring & cstring::operator =(const cstring &str)
{
if(&str == this)
{
return *this;
}
if(m_isize > 0)
{
delete []m_pstr;
}
m_isize = str.m_isize;
m_pstr = new char[m_isize];
assert(m_pstr);
strcpy(m_pstr,str.m_pstr);
return *this;
}
int cstring::operator ()()
{
return m_isize;
}
char cstring::operator [](int i)
{
if(i >= m_isize)
{
return '\0';
}
else
{
return m_pstr[i];
}
}
void cstring::print()
{
cout << m_pstr << endl;
}
int main(int argc,char *argv[])
{
cstring s1("hello"),s2(" every one!"),s3;
s3 = s1 + s2;
s3.print();
cout << s3() << endl;
cout << s3[8] << endl;
return 0;
}
- C++赋值运算符、函数调用运算符、下标运算符(“=”、“()”、“[]”)重载
- 重载赋值运算符(c/c++)
- 重载下标运算符
- 重载下标运算符[]
- 下标运算符重载【】
- 下标运算符重载
- 下标运算符重载[]
- 重载下标运算符
- 下标运算符[]重载
- 重载赋值运算符(c++)
- 赋值运算符重载函数
- 赋值运算符重载函数
- C++:赋值运算符重载
- C++重载赋值运算符(=)
- 重载赋值运算符
- 重载赋值运算符
- 重载赋值运算符
- 重载赋值运算符
- 从今天起开始写博客
- Linux下安装DB2步骤
- 有道云笔记客户端无法连接网络问题
- 线程中定时计划
- Visual Studio 2012 的新功能
- C++赋值运算符、函数调用运算符、下标运算符(“=”、“()”、“[]”)重载
- java_javadoc
- C#学习(4)删除记录
- CentOS 6.3在qume虚拟机下的安装
- ZOJ 3201 Tree of Tree(树形背包DP)
- opencv学习之第二章视频播放控制
- HTML基础(一):实用的CSS标签和属性值
- 栈的实现(JAVA)
- C++中bitset类的使用方法与应用