编码实现字符串类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; //对于友元函数重载运算符只适用于左操作数是系统变量的场景 //因为成员无法在系统 ...
随机推荐
- CRM 2013 批量更新two options的缺省值
1: string entNames = "new_print_plan,new_radio_plan,new_bill_board,new_tv_plan,new_btl_posm,new ...
- 【AGC010D】Decrementing
Solution 日常博弈论做不出来. 首先,数值全部为1的局面先手必败. 在接下来的过程中,我们只关注那些大于1的数值. 按照官方题解的思路,首先想一个简化版的问题:没有除的操作,其余相同.那么局面 ...
- 洛谷 P3253 [JLOI2013]删除物品 解题报告
P3253 [JLOI2013]删除物品 题目描述 箱子再分配问题需要解决如下问题: (1)一共有\(N\)个物品,堆成\(M\)堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能 ...
- A1060. Are They Equal
If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...
- 【洛谷P1972】HH的项链 离线+树状数组
题目大意:静态查询序列区间颜色数. 题解:对于一个查询区间 [l , r] ,若有两个相同颜色的点在这个区间中,则总是取下标靠近端点 r 的颜色计入答案贡献.对于每个下标,记录下在这个下标之前,且距离 ...
- java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 不能使用 '(未知的)';文件已在使用中
最近查看程序输入的日志时发现一个java连接Access的程序时不时的抛出: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driv ...
- Vue初学者可能不知道的坑
1.setTimeout/ setInterval 场景一 :this指向改变无法用this访问vue实例 mounted(){ setTimeout( function () { //setInte ...
- UML简单熟悉
+ :代表public - :代表private # :代表protected 实现,继承关系:implements,extends 关联关系:使一个类知道另一个类的属性和方法 每一个Driver类 ...
- noi.openjudge 2.6.162 Post Office
http://noi.openjudge.cn/ch0206/162/ 总时间限制: 1000ms 内存限制: 65536kB 描述 There is a straight highway wit ...
- models.DateTimeField(auto_now_add=True) 与 models.DateTimeField(auto_now=True)
DateTimeField和DateField和TimeField存储的内容分别对应着datetime(),date(),time()三个对象. 对于auto_now=False和auto_now_a ...