编码实现字符串类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;
}
运行结果:

编码实现字符串类CNString实现运算符重载的更多相关文章
- C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载
编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下“=”运算符.“+”运算.“[]”运算符.“<”运算符及“>”运算符及“==”运算符 ...
- C++走向远洋——50(Time类中的运算符重载、一目,二目比较运算符、二目赋值运算符、二目加减法运算符)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++走向远洋——49(项目一2、复数类中的运算符重载、类的友元函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++走向远洋——48(项目一1、复数类中的运算符重载、类的成员函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 【C++】String类中的运算符重载
模块化设计: 头文件: <span style="font-size:18px;"> #ifndef operator_operator_h #define opera ...
- C++第五次作业--运算符重载和函数重载
C++ 运算符重载和函数重载 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是 ...
- C++学习26 运算符重载的概念和语法
所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道 ...
- C++运算符重载 模板友元 new delete ++ = +=
今天的重载是基于C++ 类模板的,如果需要非类模板的重载的朋友可以把类模板拿掉,同样可以参考,谢谢. 一.类模板中的友元重载 本人喜好类声明与类成员实现分开写的代码风格,如若您喜欢将类成员函数的实现写 ...
- C++ 运算符重载三(链式编程)
//运算符重载之链式编程 #include<iostream> using namespace std; //对于友元函数重载运算符只适用于左操作数是系统变量的场景 //因为成员无法在系统 ...
随机推荐
- Impacket官方使用指南
什么是Impacket Impacket是用于处理网络协议的Python类的集合.Impacket专注于提供对数据包的简单编程访问,以及协议实现本身的某些协议(例如SMB1-3和MSRPC).数据 ...
- JS循环语句!
<1> for(1.初始值(初始值只有一次):2.判断条件:4.状态改变){ 3.执行语句: //如果判断条件为true,则进入死循环:不设执行语句浏览器会未响应: } <2> ...
- Sublime Text3—Project(项目管理)
摘要 Project 可以理解为项目.工程或者站点,以下称项目.使用项目管理的好处是:不用将所有文件都放到同一个根目录,可以将相关但不同路径的文件组成一个Project,每个项目都是独立的,文件的状态 ...
- poj 2785(折半枚举+二分搜索)
传送门:Problem 2785 题意: 给定 n 行数,每行都有 4 个数A,B,C,D. 要从每列中各抽取出一个数,问使四个数的和为0的所有方案数. 相同数字不同位置当作不同数字对待. 题解: 如 ...
- 九、java容器
目录 一.容器的概念 二.Cpllection接口 三.Iterator接口 四.增强的for循环 五.Set接口 六.List接口和Comparable接口 八.Map接口 九.自动打包/解包 十. ...
- kubernetes Dashboard 使用RBAC 权限认证控制
kubernetes RBAC实战 环境准备 先用kubeadm安装好kubernetes集群,[包地址在此](https://market.aliyun.com/products/56014009/ ...
- Java项目怎么使用Swagger生成API文档?
一.环境1. JAVA82. MAVEN 3.0.53. IDEA 2016.2.54. spring boot 1.4.1 <dependency> <groupId>io. ...
- SVM的两个参数 C 和 gamma
SVM模型有两个非常重要的参数C与gamma.其中 C是惩罚系数,即对误差的宽容度.c越高,说明越不能容忍出现误差,容易过拟合.C越小,容易欠拟合.C过大或过小,泛化能力变差 gamma是选择RBF函 ...
- SparkRDD简介/常用算子/依赖/缓存
SparkRDD简介/常用算子/依赖/缓存 RDD简介 RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区. ...
- oracle job入门【原】
oracle job入门 准备工作 先做一张学生表Table 表STUDENT create table STUDENT ( id INTEGER, name ), age INTEGER, crt_ ...