编码实现字符串类CNString实现运算符重载

题目描述:
编码实现字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载,需实现以下“=”运算符、“+”运算、“[]”运算符、“<”运算符及“>”运算符及“==”运算符(备注:可以用strcpy_s, strcat_s,但禁用STL及String类),以下为各个运算符的运算效果的详细说明

“CNString.h”

#define _CRT_SECURE_NO_WARNINGS
#ifndef CNSTRING_H
#define CNSTRING_H
class CNString
{
	public:
		CNString();                                        //默认构造函数
		CNString(const char *Str);                         //构造函数
		CNString(const CNString &string);                  //拷贝构造函数
		~CNString();                                       //析构函数
		CNString & operator = (const CNString &string);    //'='运算符重载
		CNString  operator +(const CNString &string);      //‘+’运算符重载
		char & operator [](int n);                         //'[]'运算符重载
		bool operator < (const CNString &string);          //'<'运算符重载
		bool operator > (const CNString &string);          //'>'运算符重载
		bool operator == (const CNString &string);         //'=='运算符重载
		void show();                                       //输出函数
	private:
		char *str;
};
#endif

"CNString.cpp"

#include "pch.h"
#include "CNString.h"
#include<string.h>
#include<iostream>

//默认构造函数
CNString::CNString()
{
	str = new char[1];
	str = '\0';
}

//构造函数
CNString::CNString(const char *Str) {
	int len = strlen(Str) + 1;
	str = new char[len];
	strcpy(str, Str);
}

//拷贝构造函数
CNString::CNString(const CNString &string) {
	int len = strlen(string.str) + 1;
	str = new char[len];
	strcpy(str, string.str);
}

// 析构函数
CNString::~CNString()
{
	delete[]str;
}


//'='运算符重载
CNString & CNString::operator=(const CNString &string) {
	int len = strlen(string.str) + 1;
	str = new char[len];
	strcpy(str, string.str);
	return *this;
}

//‘+’运算符重载
CNString CNString::operator +(const CNString &string) {
	strcat(str, string.str);
	return *this;
}

//'[]'运算符重载
char & CNString::operator [](int n) {
		return str[n];
}

//'<'运算符重载
bool CNString::operator < (const CNString &string) {
	if (strcmp(str, string.str) <0)
		return true;
	else
		return false;
}

//'>'运算符重载
bool CNString::operator > (const CNString &string) {
	if (strcmp(str, string.str) > 0)
		return true;
	else
		return false;
}

//'=='运算符重载
bool CNString::operator == (const CNString &string) {
	if (strcmp(str, string.str) == 0)
		return true;
	else
		return false;
}

//输出函数
void CNString::show() {
	std::cout << str << std::endl;
}

"main.cpp"

// main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include"CNString.h"
#include <iostream>

int main()
{	
	CNString CNStringstr1("abc ");
	CNString str2;
	str2 = CNStringstr1;
	std::cout << "'='号运算符重载测试str2=CNStringstr1:"<<std::endl;
	std::cout << "str2=";
	str2.show();
	std::cout<<std::endl;

	CNString CNStringstr2("abc");
	CNString CNStringstr3("def ");
	CNStringstr2 = CNStringstr2 + CNStringstr3;
	std::cout << "'+'号运算符重载测试CNStringstr2 = CNStringstr2 + CNStringstr3:" << std::endl;
	std::cout<<"CNStringstr2 = ";
	CNStringstr2.show();
	std::cout << std::endl;

	CNString nstring1("abc");
	std::cout << "'[]'运算符重载测试:" << std::endl;
	std::cout<<"nstring1[0] = " << nstring1[0] << " nsting1[2] = " << nstring1[2] << std::endl;
	std::cout<< std::endl;

	CNString CNStringstr4("abc");
	CNString CNStringstr5("efg");
	std::cout << "'<'运算符重载测试:"<<std::endl;
	if (CNStringstr4 < CNStringstr5)
		std::cout << "CNStringstr4 < CNStringstr5" << std::endl;
	std::cout << std::endl;

	std::cout << "'>'运算符重载测试:" << std::endl;
	if (CNStringstr5 > CNStringstr4)
		std::cout << "CNStringstr5 > CNStringstr4" << std::endl;
	std::cout << std::endl;

	CNString CNStringstr6("efg");
	std::cout << "'=='运算符重载测试:" << std::endl;
	if (CNStringstr5 == CNStringstr6)
		std::cout << "CNStringstr5 == CNStringstr6" << std::endl;
	return 0;
}

运行结果:

posted @ 2019-04-14 21:32  天真王二小  阅读(258)  评论(0编辑  收藏  举报