设为首页 加入收藏

TOP

C++自定义MyString类型字符串,重载相应的操作符
2018-01-11 06:06:43 】 浏览:118
Tags:定义 MyString 类型 字符串 重载 相应 操作

自定义MyString类型字符串,重载相应的操作符;

#include"iostream"	//包含C++的头文件。
#include"MyString.h"
using namespace std;	//使用标准的std命名空间(在这个空间里面定义了很多的标准定义)
//在iostream中没有引入std命名空间,在此所以要自己写;如果不写则需要显示引入std;



void main(){
	/*
	MyString s1;
	MyString s2("hahahaha");
	MyString s3(NULL);
	MyString s4 = s2;
	MyString *s5 = new MyString();
	*/
	MyString s2("hahahaha");
	MyString s6 = "heiheihei";//这种调用的是有参构造函数;
	s6 = s2;//这种是复制内容
	cout << s6.getString() << endl;
	s6 = "heheheh";//也是复制内容,以上两种都需要重载等号操作符;
	cout << s6.getString() << endl;

	s6[1] = 'A';//重载[]运算符;
	cout << s6[1] << endl;
	system("pause");
}

头文件:

#pragma once
class MyString
{
public:
	MyString();
	MyString(const char* str);
	MyString(const MyString & str);
	~MyString();
	char* getString();
	MyString& operator=(MyString& s);
	MyString& operator=(char* s);
	char& operator[](int position);
private:
	int len;
	char* mystr;
};

MyString.cpp
#include "MyString.h"
#include
  
   
using namespace std;


MyString::MyString()
{
	cout << "无参构造函数" << endl;
	len = 0;
	mystr = new char[len + 1];
	strcpy(mystr,"");
}

MyString::MyString(const char* str)
{
	cout << "有参构造函数" << endl;
	if (str==NULL)
	{
		len = 0;
		mystr = new char[len + 1];
		strcpy(mystr, "");
	}
	else {
		len = strlen(str);
		mystr = new char[len + 1];
		strcpy(mystr, str);
	}
}
MyString::MyString(const MyString & str)
{
	cout << "拷贝构造函数" << endl;
	len = str.len;
	mystr = new char[len+1];
	strcpy(mystr,str.mystr);
}

MyString& MyString::operator=(MyString& s)
{
	if (mystr!=NULL)
	{
		delete[] mystr;
		len = 0;
	}

	mystr = new char[s.len + 1];
	strcpy(mystr,s.mystr);
	len = s.len;
	return *this;
}
MyString& MyString::operator=(char* s)
{
	if (s==NULL)
	{
		len = 0;
		mystr = new char[len + 1];
		strcpy(mystr,"");
	}
	else {
		if (mystr != NULL)
		{
			delete[] mystr;
			len = 0;
		}
		len = strlen(s);
		mystr = new char[len + 1];
		strcpy(mystr, s);
	}
	return *this;
}
char* MyString::getString()
{
	return mystr;
}

//重载[];
char& MyString::operator[](int position)
{
	return mystr[position];
}
MyString::~MyString()
{
	if (mystr!=NULL)
	{
		delete [] mystr;
		mystr = NULL;
	}
	len = 0;
}

  

总结:一个类中如果有指针的话,一般需要写拷贝构造函数和=重载运算符;这两个涉及到内存析构问题(深浅拷贝);


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ubuntu下使用c++创建静态互斥锁(.. 下一篇C++二进制小数、对异域的理解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目