原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/

 一,创建测试程序包

测试代码如下:

/* Date: 2017-5-4
* Description: String operator overload test program
* Filename: string_operator.h
* Author: Myron Zhou
*/ #ifndef __STRING_OPERATOR_h_
#define __STRING_OPERATOR_h_ #include <iostream>
#include <string.h> using namespace std; class MyString
{
public:
//三个重载的构造函数
MyString();
MyString(const char* str);
MyString(const MyString& str);
//析构函数
~MyString(); //重载运算符
MyString& operator = (const MyString& str);
char& operator[](int index); //访问下标
friend ostream& operator << (ostream& out, const MyString& str); //重载输出操作符
friend istream& operator >> (istream& in, MyString& str); //重载输入操作符
friend MyString operator + (const MyString& str1, const MyString& str2); //重载加号操作符,注意返回引用不行
friend MyString operator += (MyString& str1, const MyString& str2); //重载+=操作符
friend bool operator == (const MyString& str1, const MyString& str2); //重载相等操作符
friend bool operator != (const MyString& str1, const MyString& str2); //重载不相等操作符 private:
char* p;
int len;
}; #endif
/* Date: 2017-5-4
* Description: String operator overload test program
* Filename: string_operator.cpp
* Author: Myron Zhou
*/
#include "string_operator.h"
using namespace std; //默认构造函数,初始化为空串
MyString::MyString()
{
len = ;
p = new char[len + ];
p[] = '\0';
}
//构造函数,用一个字符串初始化
MyString::MyString(const char* str)
{
len = strlen(str);
p = new char[strlen(str) + ];
strncpy(p, str,len+);
}
//拷贝构造函数,用另外一个string初始化
MyString::MyString(const MyString& str)
{
len = str.len;
p = new char[strlen(str.p) + ];
strncpy(p, str.p, strlen(str.p) + );
}
//析构函数
MyString::~MyString()
{
delete[] p;
}
//重载赋值操作符( = )
MyString& MyString::operator = (const MyString& str)
{
if (this->p == str.p)
{
return *this;
}
delete[] p;
len = str.len;
p = new char[len + ];
strncpy(p, str.p, len + );
return *this;
}
//重载输出操作符( << )
ostream& operator << (ostream& out, const MyString& str)
{
out << str.p;
return out;
}
//重载输入操作符( >> )
istream& operator >> (istream& in, MyString& str)
{
in >> str.p;
return in; }
//重载加号操作符( + )
MyString operator + (const MyString& str1, const MyString& str2)
{
MyString str;
delete[] str.p;
str.len = str1.len + str2.len;
str.p = new char[str.len + ];
strncpy(str.p, str1.p, str.len + );
strncat(str.p, str2.p, str.len + );
return str;
}
//重载相加赋值操作符( += )
MyString operator += (MyString& str1, const MyString& str2)
{
str1 = str1 + str2;
return str1;
}
//重载相等操作符
bool operator == (const MyString& str1, const MyString& str2)
{
if (strcmp(str1.p, str2.p) == )
{
return true;
}
return false;
}
//重载不相等操作符
bool operator != (const MyString& str1, const MyString& str2)
{
if (strcmp(str1.p, str2.p) == )
{
return false;
}
return true;
} //重载下标([])
char& MyString::operator[](int index)
{
return p[index];
}
/* Date: 2017-5-4
* Description: String operator overload test program
* Filename: main.cpp
* Author: Myron Zhou
*/ #include "string_operator.h" int main()
{
MyString mystr("this is test program!"); //测试构造函数,用一个字符串初始化
cout << mystr[] << endl;
mystr[] = 'd';
cout << mystr <<endl;
MyString mystr2(mystr); //用另外一个string初始化
cout << mystr2 << endl;
MyString mystr3;
mystr3 = mystr + mystr2; //测试加号运算符,测试赋值运算符
cout << mystr + mystr2 << endl;
mystr3 += mystr; //测试+=运算符
cout << mystr3 << endl;
cout << (mystr == mystr2) << endl; //测试 ==
cout << (mystr != mystr3) << endl; //测试 !=
MyString mystr4;
cout << "good luck!" << endl;
cin >> mystr4; //测试重载的输入符号( >> )
cout << mystr4 << endl; return ;
}

二,编译运行代码

c++String类的运算符重载---21的更多相关文章

  1. string类中运算符重载实现

    C++中预定义的加.减等运算符的操作对象只能是基本的数据类型.如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载 ...

  2. YTU 2617: B C++时间类的运算符重载

    2617: B C++时间类的运算符重载 时间限制: 1 Sec  内存限制: 128 MB 提交: 284  解决: 108 题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为 ...

  3. 问题 C: B C++时间类的运算符重载

    题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour).分(minute),秒(second). 重载运算符“+”,使之能用于时间对象的加法运算:重载运算符 ...

  4. sdut 4-1 复数类的运算符重载

    4-1 复数类的运算符重载 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 通过本题目的练习能够掌握成员运算符重载及友元运算符重载 要求定义一个复数类.重 ...

  5. 理解String拼接,+运算符重载的实际效果

    引申:一个常见的String的面试题 public static void main(String[] args) { // TODO Auto-generated method stub Strin ...

  6. 问题 B: 矩形类中运算符重载【C++】

    题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩 ...

  7. C# 类型运算符重载在类继承中的调用测试

    这是一篇晦涩难懂的片面的研究 一,简单的继承层次 class CA { } class CB : CA{ } class CC : CB{ } } void Test(CA oa){//CATest ...

  8. 玩转C++运算符重载

    运算符重载语法:返回值类型  operator运算符(参数列表) {  代码逻辑... } C++中的运算符重载是通过函数来实现的,可以将重载的运算符看作是类成的一个成员函数,向普通函数一样调用.如重 ...

  9. C#基础加强(6)之引用相等与运算符重载

    引用相等 介绍 在 C# 中可以通过 object.ReferenceEquals(obj1, obj2) 方法来判断两个变量引用的是不是同一个地址,如果是,那么就是引用相等. 引用相等是针对引用类型 ...

随机推荐

  1. JS监听页面----无鼠标键盘动作,自动跳页

    function ScreenSaver(settings){ this.settings = settings; this.nTimeout = this.settings.timeout; doc ...

  2. Spring Cloud Config 配置中心高可用

    详细参见 <Spring Cloud 与 Docker微服务架构实战> p163-9.10 Spring Cloud Config 与 Eureka 配合使用 p163-9.12 Conf ...

  3. 红楼梦人物关系图,一代大师成绝响,下回分解待何人,kindle读书摘要

      人物关系图: https://www.cnblogs.com/images/cnblogs_com/elesos/1120632/o_2033091006.jpg 红楼梦 (古典名著普及文库) ( ...

  4. postgresql远程连接中断的处理

    在网络上连接远程服务器postgresql时,不活动时间稍长就会自动断开连接,不利于操作. 琢磨了一下,服务器上使用以下网络配置时,解决了这个问题.   #man 7 tcp   net.ipv4.t ...

  5. js类型判断的方法

    var arr=[]; alert(Object.prototype.toString.call(arr)=='[object Array]');

  6. 快速掌握Vue.js使用【转】

    Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使 ...

  7. [kafka] 003_kafka_主要配置

    1.broker配置 2.Producer主要配置 3.Consumer主要配置 出错提示信息: replication factor: 1 larger than available brokers ...

  8. 远程操作与端口转发 SSH原理与运用

    SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一节的操作,就是一个例子: $ ssh user@host 'mkdir -p .ssh && cat >&g ...

  9. VS下关于 _CRT_SECURE_NO_WARNINGS 问题的分析与解决

    一.问题的起因 六月下旬,老师布置了有关图形学的课设,于是我将我在VS2013中写好的代码进行编译,结果得到了以下信息: 二.解决方法 1,按照英文提示,我先将fopen改成了fopen_s后,发现错 ...

  10. 于erlang依赖的linux调优

    [皇室]杭州-sunface(61087682) 上午 9:42:02 http://docs.basho.com/riak/latest/ops/tuning/linux/ 这篇文章对于erlang ...