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

以下为各个运算符的运算效果的详细说明:

a)     字符串“=”重载运算符

CNStringstr1("abc ");

CNString str2 = str1;

b)    字符串“+”运算

CNStringstr1("abc");

CNStringstr2("efg ");

str1 = str1 + str2;

c)     字符串“[]”运算

CNString nstring1("abc");

cout<< nstring1[0] ;// 则屏幕显示a

cout<< nstring1[2] ; // 则屏幕显示c

d)    “<”运算符

CNStringstr1("abc");

CNStringstr2("efg");

if (str1 <str2 ){

cout<<“str1<str2”<<endl;

}

e)     “>”运算符

CNStringstr1("abc");

CNStringstr2("efg");

if (str1 >str2 ){

cout<<“str1>str2”<<endl;

}

f)      “==”运算符

CNStringstr1("abc");

CNStringstr2("efg");

if (str1 == str2){

cout<<“str1==str2”<<endl;

}

代码实现:

#include<iostream>
#include<string.h>
using namespace std; class CNString
{
private:
char *str_F;
public:
CNString(){str_F=NULL;};//默认构造函数
CNString(char *str);//有参构造函数
CNString(const CNString &other);//类的拷贝函数
~CNString();//类的析构函数
CNString &operator=(const CNString &obj);//"="号重载
CNString &operator+(const CNString &obj);//"+"号重载
char& operator[](int i);//"[]"号重载
bool operator<(const CNString &obj);//"<"号重载
bool operator>(const CNString &obj);//">"号重载
bool operator==(const CNString &obj);//"=="号重载
void print()//打印str_F的结果
{
cout<<str_F<<endl;
}
};
CNString::CNString(char *str)
{
str_F = new char(strlen(str)+);
if(str_F!=) strcpy(str_F,str);
}
CNString::CNString(const CNString &obj)
{
str_F = new char(strlen(obj.str_F)+);
if(str_F!=) strcpy(str_F,obj.str_F);
}
CNString::~CNString()
{
delete []str_F;
}
CNString & CNString::operator=(const CNString &obj)
{
char * tem=new char(strlen(obj.str_F)+);
strcpy(tem,obj.str_F);
str_F=tem;
delete[]tem;
return *this;
}
CNString & CNString::operator+(const CNString &obj)
{
strcat(str_F,obj.str_F);
return *this;
}
char &CNString::operator[](int i)
{
return str_F[i];
}
bool CNString::operator<(const CNString &obj)
{
int c = strcmp(str_F,obj.str_F);
if(c<) return true;
else return false;
}
bool CNString::operator>(const CNString &obj)
{
int c = strcmp(str_F,obj.str_F);
if(c>) return true;
else return false;
}
bool CNString::operator==(const CNString &obj)
{
int c = strcmp(str_F,obj.str_F);
if(c==) return true;
else return false;
}
int main()
{
CNString str1("abc ");
CNString str2("edf");
CNString str3;
cout<<"实现运算符+和=重载后:"<<endl;
str3 = str1 + str2;
str3.print();
cout<<"实现运算符[]重载后:"<<endl;
CNString nstring1("abc");
cout<<nstring1[]<<endl;
cout<<"实现运算符'<' '>' '=='重载后:"<<endl;
if (str1 <str2 )
{
cout<<"str1<str2"<<endl;
}
if (str1 >str2 )
{
cout<<"str1>str2"<<endl;
}
if(str1==str2)
{
cout<<"str1==str2"<<endl;
}
return ;
}

实现效果图:

C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载的更多相关文章

  1. C++编译器会对没有构造函数的类生成默认构造函数吗?(有必要的时候才生成,要看情况。有反汇编验证)

    之前在上C++的课的时候,印象中有那么一句话:如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数 今天在看<深度探索C++对象模型>的第二章:“构造函数语意学”的时候发现之前听 ...

  2. 编码实现字符串类CNString实现运算符重载

    题目描述: 编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下"="运算符."+"运算."[]& ...

  3. C++中的空类,编译器默认可以产生哪些成员函数

    C++中的空类,编译器默认可以产生哪些成员函数 C++中创建一个空类:class Empty {};默认会生成4个函数,其函数的原型如下: public: Empty() { ... } Empty( ...

  4. C++ 合成默认构造函数的真相

    对于C++默认构造函数,我曾经有两点误解: 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数. 合成默认构造函数会初始化类中所有的数据成员. 第一个误解来自于我学习 ...

  5. C/C++ 关于默认构造函数

    前言: 在C++中,对于一个类,C++的编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认析构函数 A(const A&) //默认拷贝构造函数 A&a ...

  6. 【C++对象模型】构造函数语意学之一 默认构造函数

    默认构造函数,如果程序员没有为类定义构造函数,那么编译器会在[需要的时候]为类合成一个构造函数,而[需要的时候]分为程序员需要的时候和编译器需要的时候,程序员需要的时候应该由程序员来做工作,编译器需要 ...

  7. C++默认构造函数的一点说明

    大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成默认构造函数.其实这句话我一直也是 深信不疑.但是最近看了一些资料让我有了一点新的认识. 其实我觉得大多数C++书籍之所以这样描述 ...

  8. C++编译器何时为用户提供默认构造函数

    第一种是类成员中有成员是类对象,并且该成员的类含有默认构造函数,那么C++编译器会帮你给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造.需要强调的是,如果这个成员的 ...

  9. 合成的默认构造函数定义为delete的一种情况(针对C++11标准)

    1. 默认初始化 如果定义变量时没有指定初值,则变量会被默认初始化,此时变量被赋予了"默认值". 对于类类型的变量来说,初始化都是依靠构造函数来完成的.因此,即使定义某个类的变量( ...

随机推荐

  1. cookie 、Session 和自定义分页

    cookie cookie的由来 大家都知道Http协议是无状态的. 无状态的意思 是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系, 他不会受前面的请求响应情况直接影响, ...

  2. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第五篇(用户管理之“用户权限分配”)

    一.在做权限分配之前,首先先了解“ZTree”这个插件,我的这个系统没有用Jquery-EasyUI的Tree.用的是”ZTree“朋友们可以试试,也很强大.点击下载ZTree插件.       1. ...

  3. jexus处理静态文件(处理后缀)

    AspNet_Exts=txt就能把你指定的扩展名交给asp.net处理.同理,可以写很多个,AspNet_Exts=txt,htm,html

  4. VS(Visual Studio)中快速找出含中文的字符串

    环境:visual studio 2017 1.ctrl + shift + f 打卡全局查找 2.输入(".*[\u4E00-\u9FA5]+)|([\u4E00-\u9FA5]+.*&q ...

  5. code first迁移和部署

    从"工具"菜单中,选择"NuGet 包管理器" > "包管理器控制台". 在PM>提示符处输入以下命令: enable-migr ...

  6. ElasticSearch 学习一: 基本命令

    1. 启动时指定集群和节点的名字./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_namee.g. ./elasti ...

  7. MCP|WJ|Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex proximity extension assay(利用多重邻位延伸分析技术进行宫颈癌血浆蛋白候选生物标记物的鉴定研究)

    文献名:Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex pr ...

  8. IOS Swift UITableViewcontroller实现点击空白处隐藏键盘

    在ios开发中,为了方便,我们经常使用UITableViewcontroller,比如搜索界面为了方便可能更多的使用UITableViewcontroller,那么问题就来了,当我点击搜索框的时候会弹 ...

  9. spark sql metastore 配置 mysql

    本文主要介绍如何为 spark sql 的 metastore 配置成 mysql . spark 的版本 2.4.0 版本 hive script 版本为 hive 1.2.2 mysql 为 5. ...

  10. mysql之SQL入门与提升(二)

    在mysql之SQL入门与提升(一)我们已经有了些许基础,今天继续深化 先造表 SET NAMES utf8;SET FOREIGN_KEY_CHECKS = 0; -- -------------- ...