题目描述:

编码实现字符串类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;
}

运行结果:

编码实现字符串类CNString实现运算符重载的更多相关文章

  1. C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载

    编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下“=”运算符.“+”运算.“[]”运算符.“<”运算符及“>”运算符及“==”运算符 ...

  2. C++走向远洋——50(Time类中的运算符重载、一目,二目比较运算符、二目赋值运算符、二目加减法运算符)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  3. C++走向远洋——49(项目一2、复数类中的运算符重载、类的友元函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  4. C++走向远洋——48(项目一1、复数类中的运算符重载、类的成员函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. 【C++】String类中的运算符重载

    模块化设计: 头文件: <span style="font-size:18px;"> #ifndef operator_operator_h #define opera ...

  6. C++第五次作业--运算符重载和函数重载

    C++ 运算符重载和函数重载 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是 ...

  7. C++学习26 运算符重载的概念和语法

    所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道 ...

  8. C++运算符重载 模板友元 new delete ++ = +=

    今天的重载是基于C++ 类模板的,如果需要非类模板的重载的朋友可以把类模板拿掉,同样可以参考,谢谢. 一.类模板中的友元重载 本人喜好类声明与类成员实现分开写的代码风格,如若您喜欢将类成员函数的实现写 ...

  9. C++ 运算符重载三(链式编程)

    //运算符重载之链式编程 #include<iostream> using namespace std; //对于友元函数重载运算符只适用于左操作数是系统变量的场景 //因为成员无法在系统 ...

随机推荐

  1. Word Ladder - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Word Ladder - LeetCode 注意点 每一个变化的字母都要在wordList中 解法 解法一:bfs.类似走迷宫,有26个方向(即26个字 ...

  2. 【AGC014E】Blue and Red Tree

    Description 给定一棵\(n\)个节点的蓝边树,再给定一棵\(n\)个节点的红边树.请通过若干次操作将蓝树变成红树.操作要求和过程如下: 1.选定一条边全为蓝色的路径: 2.将路径上的一条蓝 ...

  3. 监控(3)进程通用shell

    #! /bin/bash proc_name="beam.smp" #进程名 proc_num() #查询进程数{ num=`ps -ef | grep $proc_name | ...

  4. enumerate()用法

    语法: enumerate(sequence,[start=0]) test = [i for i in range(9)] for i in test: print(i) for i,j in en ...

  5. centos6.5之Hadoop1.2.1完全分布式部署安装

    0. 说明 系统中首先要安装好jdk环境. 已经配置ssh免密码登录. 设置好防火墙,或者关闭防火墙. 如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把master配置好的软件即hadoo ...

  6. C# 面向对象的封装、继承、多态

    一.封装: 封装:把客观的事物封装成类,使用和修改方便: 作用和结构体使用方法相似,程序执行流程不同: 要点:成员变量,属性,成员方法,构造函数,成员方法的静态和非静态,命名空间,常用的访问修饰符pu ...

  7. MSSQL 转 ACCESS 在表格结构上应注意的

    今天在把一个MSSQL数据库转为ACCESS发现了一些问题: 在MSSQL表格中的一个(标识)递增字段转到ACCESS后,变成了 “数字”类型,而不是“自动编号”. 而当在Access中,一个字段类型 ...

  8. Linux:从文件中搜索关键字并显示行数(cat,grep函数)

    假如有test1.txt的格式如下图所示: 有test2.txt的内容如下: 现需将test2.txt含有的关键字的行搜索出来并显示行数 则可以用到命令: cat test1.txt | grep - ...

  9. echarts2 饼图处理标签文字过长使之达到指定字数换行的目的

    在使用echarts2的过程中,有时会遇到标签文字过长导致显示不完整的问题.例如: 这时候就需要用到 标签里的formatter 回调函数来处理这种情况了. 方式一:  formatter : ' { ...

  10. python爬虫-采集英语翻译

      http://fanyi.baidu.com/?aldtype=85#en/zh/drughttp://fanyi.baidu.com/?aldtype=85#en/zh/cathttp://fa ...