C++中,自定义string类,实现字符串的赋值“=”和连接函数“+”
来源:互联网 发布:百度鹰眼定位软件 编辑:程序博客网 时间:2024/06/06 00:35
对于在C语言中,我们使用指针可以轻而易举的实现字符串的拷贝和连接等,在C++中,C在里面是完全兼容的,所以我们就可以在这里大展伸手,开始我们的C++的学习之旅,这篇文章我们实现自定义一个string类,实现字符串的赋值和连接,也就是C++里所谓的运算符重载;运算符重载是使用函数实现的,我们应该遵循函数的一些规则。 这里我说一下对于为什么进行运算符重载?我个人来看,大部分的运算符只适用于基本的数据类型,要想实现对象之间的运算,就得用到运算符重载了。 对于不能重载的 运算符(取成员 . ?号表达式 “?:” sizeof 作用域::)。 对于运算符重载的语法格式: <返回值类型> operator <运算符符号 >(<参数列表>) { 函数体; }
对于重载 ,我们有两种方式,1成员函数运算符重载,2 友元运算符重载,这两种方式我会在代码中都会涉及到,如代码所示,我在实现运算符“=”重载的时候使用的是成员函数运算符重载,在“+”使用的是友元运算符重载。
对于为什么要使用这两个呢?在我看来,在自己定义一个类的时候,只有公有(public)的可以去访问私有的(private),也就是使用类的公有成员去访问它的私有成员,要么就是通过声明这个函数是友元函数。这就可以去访问一个类的私有成员了。
这是xstring.h 头文件
#include <iostream>using namespace std;class String{private: char * m_data; //用于保存字符串 int length; //字符数组的大小public: // 无参构造函数 String() { m_data = 0; length = 0; } // 拷贝构造函数 String(const String &s); //定义初始化构造函数 String(const char *s); // 析构函数 ~String() { delete[] m_data; } //打印字符串 void primsg() { cout << "字符串为:" << this->m_data << endl; } // 赋值函数 void operator = (const String &s); //连接函数实现字符串相加 friend String operator + (const String &s1, const String &s2);};
xtring.c
#include "xString.h"//求字符串的长度int xstrlen(const char *arr){ for (int i=0; arr[i] != '\0'; i++) {} return i;}//字符串拷贝char * xstrcpy(char *des, const char *src){ char *tmp = des; while ((*des++ = *src++) != '\0'); return tmp;}//自符串连接函数char *xstrcat(char *des, const char *src){ char *tmp = des; int lenth = xstrlen(des); while (*src != '\0') { *(des + lenth) = *(src); src++; des++; } *(des + lenth) = *(src); return tmp;}//实现拷贝构造函数String::String(const String &s){ length = s.length; if (s.m_data) { m_data = new char[length + 1]; xstrcpy(m_data, s.m_data); } else m_data = 0;} //构造函数String::String(const char *s){ length = xstrlen(s); m_data = new char[length + 1]; xstrcpy(m_data, s);} //=重载void String::operator = (const String &s){ if (m_data) delete[] m_data; length = s.length; if (s.m_data) { m_data = new char[length + 1]; xstrcpy(m_data, s.m_data); } else m_data = 0;}//+重载String operator + (const String &s1, const String &s2){ String tmp; tmp.length = s1.length + s2.length; tmp.m_data = new char[tmp.length + 1]; xstrcpy(tmp.m_data, s1.m_data); xstrcat(tmp.m_data, s2.m_data); return tmp;}
test.c
#include "xString.h"int main(){ String s1("hello"); s1.primsg(); String s2=s1; s2.primsg(); String s3(" world"); s3.primsg(); String s4 = s1 + s3; s4.primsg(); return 0;}
阅读全文
0 0
- C++中,自定义string类,实现字符串的赋值“=”和连接函数“+”
- 【C/C++】实现一个string类的构造函数、析构函数和赋值函数
- C++【拷贝构造】和【拷贝赋值】(实现自定义的string类)
- 实现C++string的赋值函数
- 自定义String类:构造函数、复制构造函数、赋值函数的实现
- C/C++学习笔记:String类的构造函数、析构函数和赋值函数
- C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
- c/c++整理--类String的构造函数、析构函数和赋值函数
- c/c++整理--类String的构造函数、析构函数和赋值函数
- String类中构造函数、拷贝构造函数、赋值函数的实现
- 算法25:实现String类的构造函数,拷贝构造函数和赋值函数
- 实现字符串类String的设计,实现赋值运算符重载函数,默认、一般、拷贝构造函数,析构函数
- Java中字符串(String)的存储和赋值原理
- Java中字符串(String)的存储和赋值原理
- Java中字符串(String)的存储和赋值原理
- C风格字符串和string类的操作——从实现atoi函数开始
- 自定义函数实现字符串中数据的运算和统计
- 实现string的默认构造函数,拷贝函数,c型字符串参数的构造函数,赋值构造函数,析构函数,重载输出操作符,测试
- JavaScript创建对象—从es5到es6
- 深入分析Java并发中volatile的实现原理
- F
- Rescue HDU
- D3 笔记五:过渡、transition、duration、ease、delay
- C++中,自定义string类,实现字符串的赋值“=”和连接函数“+”
- 数据类型初始化后的默认值
- 推荐一款makdown剪辑器-mditor
- STL游标—迭代器(itertor)的使用
- 【CSS 基础】06 盒子模型
- 【搜索入门专题1】E
- 深入理解Java虚拟机 第七章 虚拟机类加载时机与过程
- redis持久化选项
- 205. Isomorphic Strings