zoukankan      html  css  js  c++  java
  • 编码实现字符串类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;
    }
    
    

    运行结果:

  • 相关阅读:
    解惑丨C语言字符串常量、字符数组、字符指针!
    程序员压根就不想找对象?谁说的,给我站出来!
    C/C++实习工作应该具备那些能力?才能拿更好的工作和薪资!
    mysql查看创建数据表的DDL语句
    .NET 5 ML.NET 部署运行时出现 Unable to load DLL MklImports 的处理方法
    canvas波浪扇形
    小程序 Canvas 倒计时组件 (React 版)
    Canvas 倒计时
    策略模式实战中多种写法
    MySQL-基础架构介绍
  • 原文地址:https://www.cnblogs.com/izzwhf/p/10707180.html
Copyright © 2011-2022 走看看