C++面试或者笔试的时候经常遇到这样一个问题,就是自己实现一个string类。
本人总结自己的面试经验以及参考网上各位网友的总结,总得来说常见的主要实现的包括以下几个方面(如有不如,欢迎补充)
常见:普通的构造函数、拷贝构造函数、析构函数、字符串的链接即‘+’号运算符重载、字符串赋值即‘=’号运算符重载、字符串是否相等即‘==’号运算符重载、获取字符串长度
不常见:输入‘>>’重载、输出‘<<'重载
StringRealiza.h
1 #pragma once
2
3 #include <iostream>
4
5 class StringRealize
6 {
7 friend std::ostream& operator<<(std::ostream& os, const StringRealize& str);//输出符重载
8 friend std::ostream& operator>>(std::ostream& os, const StringRealize& str);//输入符重载
9
10 public:
11 StringRealize(const char *str = NULL);//普通构造函数
12 StringRealize(const StringRealize& str);//拷贝构造函数
13 ~StringRealize(void);//析构函数
14
15 StringRealize& operator=(const StringRealize& str);//赋值运算符'='号重载
16 StringRealize operator+(const StringRealize& str);//链接字符串‘+’号重载
17 bool operator==(const StringRealize& str);//等号运算符‘==’号重载
18
19 int getLength(void);//获取字符串的长度
20 private:
21 char *m_data;//用于保存字符串
22 };
StringRealiza.cpp
1 #include "StringRealize.h"
2
3 //普通构造函数
4 StringRealize::StringRealize(const char *str)
5 {
6 if (str == NULL)
7 {
8 this->m_data = NULL;
9 }
10 else
11 {
12 this->m_data = new char[strlen(str) + 1];
13 strcpy(this->m_data,str);
14 }
15 }
16
17 //拷贝构造函数
18 StringRealize::StringRealize(const StringRealize& str)
19 {
20 if (str.m_data == NULL)
21 {
22 this->m_data = NULL;
23 }
24 else
25 {
26 this->m_data = new char[strlen(str.m_data) + 1];
27 strcpy(this->m_data,str.m_data);
28 }
29 }
30
31 //析构函数
32 StringRealize::~StringRealize(void)
33 {
34 if (this->m_data)
35 {
36 delete[] this->m_data;
37 this->m_data = NULL;
38 }
39 }
40
41 //赋值运算符'='号重载
42 StringRealize& StringRealize::operator=(const StringRealize& str)
43 {
44 if (this != &str)
45 {
46 delete[] this->m_data;
47 this->m_data = NULL;
48
49 if (str.m_data == NULL)
50 {
51 this->m_data = NULL;
52 }
53 else
54 {
55 this->m_data = new char[strlen(str.m_data) + 1];
56 strcpy(this->m_data,str.m_data);
57 }
58 }
59
60 return *this;
61 }
62
63 //链接字符串‘+’号重载
64 StringRealize StringRealize::operator+(const StringRealize& str)
65 {
66 StringRealize newString;
67 if (str.m_data == NULL)
68 {
69 return *this;
70 }
71 else if (this->m_data == NULL)
72 {
73 newString = str;
74 }
75 else
76 {
77 newString.m_data = new char[strlen(str.m_data) + strlen(this->m_data) + 1];
78 strcpy(newString.m_data,this->m_data);
79 strcpy(newString.m_data,str.m_data);
80 }
81
82 return newString;
83 }
84
85 //等号运算符‘==’号重载
86 bool StringRealize::operator==(const StringRealize& str)
87 {
88 if (strlen(this->m_data) != strlen(str.m_data) )
89 {
90 return false;
91 }
92 else
93 {
94 return strcmp( this->m_data, str.m_data ) ? false : true;
95 }
96
97 }
98
99 //获取字符串的长度
100 int StringRealize::getLength()
101 {
102 return strlen(this->m_data);
103 }
104
105 //输出符重载
106 std::ostream& operator<<(std::ostream& os, const StringRealize& str)
107 {
108 os<<str.m_data;
109 return os;
110 }
111
112 //输入符重载
113 std::ostream& operator>>(std::ostream& os, const StringRealize& str)
114 {
115 os>>str.m_data;
116 return os;
117 }
原文链接: https://www.cnblogs.com/LYF-LIUDAO/p/7066128.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/255759
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!