编码实现字符串类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; //对于友元函数重载运算符只适用于左操作数是系统变量的场景 //因为成员无法在系统 ...
随机推荐
- python2和python3的主要区别
作为一个py3土著,并不是很关心这个问题,但是总有人隔三差五问这个问题,还是捋了一下. 这里列出几个主要区别: 1.最常见的人尽皆知的print()函数 在py2中,print是一个语句,不带括号,也 ...
- 在Android中通过导入静态数据库来提高应用第一次的启动速度
一个Android应用给用户的第一印象非常重要,除了要有好的创意和美观的界面,性能也是很关键的部分,本文讨论的就是第一次启动的速度问题. Android应用的启动过程不能让用户等待太长时间,个人觉得最 ...
- (转)synchronized和lock的区别
背景:最近在准备java基础知识,对于可重入锁一直没有个清晰的认识,有必要对这块知识进行总结. 1 . 什么是可重入锁 锁的概念就不用多解释了,当某个线程A已经持有了一个锁,当线程B尝试进入被这个锁保 ...
- select和select的数据渲染,你知道多少呢?
select和option是一对好兄弟,他们是一个很强大的组合.多个元素组合在一起才有的属性,他们两个加起来一切都有了. 所谓的面包也要,鲜花也要,就是这么的任性. 首先看看他们的基本html结构 当 ...
- shopnc 手机网站配置
完整版SHOPNC下载地址:http://www.fenxiangweb.com/thread-7643-1-1.html SHOPNC手机wap版安装教程 1.进入根目录下mobile/readme ...
- Excel:LOOKUP函数的经典用法
1.逆向查询 下面这个表中,A:C列是员工基础信息表,分别是部门.姓名和职务. 现在要根据E5单元格中的员工姓名,在这个信息表中查询属于哪个部门,也就是咱们常说的逆向查询,就可以使用LOOKUP函数 ...
- 高效的SQLSERVER分页查询
Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...
- Meavn项目中log4j的使用
两个步骤: 1.在pom.xml中添加: <dependency> <groupId>log4j</groupId> <artifactId>log4j ...
- JavaSE学习总结(六)——接口、抽象类、内部类
一.不需要实例化的原因 看一个示例: package com.zhangguo.chapter5.s1; /**动物园*/ public class Zoo { public static void ...
- Dubbo的负载均衡
背景 Dubbo是一个分布式服务框架,能避免单点故障和支持服务的横向扩容.一个服务通常会部署多个实例.如何从多个服务 Provider 组成的集群中挑选出一个进行调用,就涉及到一个负载均衡的策略. 几 ...