首页 技术 正文
技术 2022年11月18日
0 收藏 652 点赞 2,190 浏览 2745 个字
#include "stdafx.h"
#include<iostream>
#include<string.h>
using namespace std;//类的成员函数中,有一些是加了const修饰符的,表示这个函数不会对类的成员进行修改,一些函数的输入参数也加了const修饰,表示该函数不会改变这个参数的值
class String
{
public:
String(const char *str = NULL); //通用构造函数,没值的时候,用NULL默认初始化
String(const String &str); //拷贝构造函数
~String(); //析构函数String operator+(const String &str)const; //重载+
String& operator=(const String &str); //重载=
String& operator+=(const String &str);
bool operator==(const String &str)const; //重载==
char& operator[](int n)const; //重载[]size_t size()const; //获取长度
const char* c_str()const; //获取C字符串friend std::istream& operator>>(std::istream&is, String &str); //输入
friend std::ostream& operator<<(std::ostream&os, String &str); //输出private:
char *data; //字符串
size_t length; //长度
};String::String(const char *str) // 通用构造函数
{
if (!str)
{
length = 0;
data = new char[1];
*data = '\0';
}
else
{
length = strlen(str);
data = new char[length + 1];
strcpy_s(data, length+1,str);
}
}String::String(const String &str) //拷贝构造函数,要深层复制
{
length = str.size();
data = new char[length + 1];
strcpy_s(data,str.length+1, str.c_str());
}String::~String()
{
delete[] data;
length = 0;
}String String::operator+(String const &str)const
{
String newString;
newString.length = length + str.size();
newString = new char[newString.length + 1];
strcpy_s(newString.data,newString.length+1, data);
strcat_s(newString.data,newString.length+1, str.data);
return newString;
}String& String::operator=(const String &str) //链式赋值,返回引用(对象本身)
{
if (this == &str)
return *this;delete[]data;
length = str.length;
data = new char[length + 1];
strcpy_s(data,length+1, str.data);
return *this;
}String& String::operator+=(const String &str)
{
length += str.length;
char *newData = new char[length + 1];
strcpy_s(newData,length+1, data);
strcat_s(newData,length+1, str.data);
delete[]data;
data = newData;
return *this;
}
inline bool String::operator==(const String&str)const
{
/*if (length != str.length)
return false;*/
return strcmp(data, str.data) ? false : true;
}
inline char& String::operator[](int n)const
{
if (n >= length)
return data[length - 1];
else
return data[n];
}
inline size_t String::size()const
{
return length;
}
//重载输入运算符,先申请一块足够大的内存来存放输入字符串,再进行新的字符串的生成
std::istream& operator>>(std::istream& is, String &str) //为了连续输入,返回引用
{
char tem[100];
is >> tem;
str.length = strlen(tem);
str.data = new char[str.length + 1];
strcpy_s(str.data,str.length+1, tem);
return is;
}
std::ostream&operator<<(std::ostream &os, String &str) //为了连续输出,返回引用(对象本身)
{
os << str.data;
return os;
}
inline const char* String::c_str()const
{
return data;
}
int _tmain(int argc, _TCHAR* argv[])
{
/*String s;
std::cin >> s;
printf("s:is\n%s\ns.size()is\n%d\n",s,s.size());*///std::cout << "s:\n" << s<<"\n" << "s.size()\n" << s.size() << std::endl;char a[] = "hello", b[] = "world";
String s1(a), s2(b);
//printf("s1\n%c\ns2\n%c\n", s1, s2);
//std::cout << s1 << "+" << s2 << "=" << s1 + s2 << std::endl;String s3 = s1 + s2;
if (s1 == s3)
cout << "first:s1==s3" << endl;
s1 += s2;
if (s1 == s3)
cout << "second:s1==s3" << endl;
return 0;
}

参看:https://www.cnblogs.com/zhizhan/p/4876093.html

上一篇: linux内存黑洞
下一篇: rn最新版测试
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,105
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,582
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,429
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,836
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,919