C++模拟string类
来源:互联网 发布:编程语言实现模式 pdf 编辑:程序博客网 时间:2024/05/17 12:56
#include<iostream>
using namespace std;
class String
{
private:
char*str;
public:
String(){}
String(constchar *s):str( new char[strlen(s) + 1])
{
strcpy(str,s);
}
String(constString &ob):str ( new char[strlen(ob.str) + 1])
{
strcpy(str,ob.str);
}
~String()
{
delete[]str;
str= NULL;
}
String&operator = (const String &ob)
{
if(strcmp(str, ob.str) == 0)
return*this;
delete[]str;
str= new char[strlen(ob.str) + 1];
strcpy(str,ob.str);
return*this;
}
Stringoperator +(String &ob)
{
Stringtemp;
temp.str= new char[strlen(str) + strlen(ob.str) + 1];
strcat(temp.str,str);
strcat(temp.str,ob.str);
returntemp;
}
friendostream& operator<<(ostream &output, const String &ob)
{
output<< ob.str;
return output;
}
friendistream& operator>>(istream &input, const String &ob)
{
input>> ob.str;
returninput;
}
charoperator[](size_t i)
{
returnstr[i];
}
};
int main()
{
Strings1("666666");
cout<< s1 << endl;
Strings2("999999");
cout<< s2 << endl;
Strings3;
s3= s2 + s1;
cout<< s3 << endl;
cout<< s2[2] << endl;
return0;
}
1.使用初始化列表的好处:
(1).为初始化基类传递参数,使其能够有参初始化基类。
(2).提高组合类成员的初始化效率。因为初始化列表比把组合成员放在构造函数中初始化,省略了调用组合成员对象的赋值构造函数,同时也省略了因为显式调用组合成员的构造函数而生成的临时对象。
2.const好处
(1).当实参的类型比较大时,复制开销很大(形参初始化时),引用会“避免复制”。(这在传递类对象时比较常用)
(2).“避免修改实参”,当使用引用时,如果调用者希望只使用实参并不修改实参,则const可以避免使用该引用修改实参
(3).相比非const引用形参,更具实用性:形参可以使用const对象初始化,可使用字面值或右值表达式的实参来初始化
3.引用(&)的好处
(1).C++中参数传递过程中,是值拷贝的,如果参数大,或者函数调用频繁用引用会大大提高效率,引用只是别名不会进行值复制的。
(2).引用的功能指针都能实现,不过指针不安全,写的时候一不注意就是BUG,用引用安全
- C++:模拟实现string类
- 模拟实现string类(c++)
- 【C++】模拟实现String类
- 模拟实现C++STL中的string类
- 【c++】模拟实现string类__实现增删查改
- 模拟string类
- 模拟实现string类
- 模拟实现string类
- String类模拟
- 模拟String类
- 模拟实现 string类
- 模拟实现string类
- 模拟string类
- 模拟实现string类
- C++模拟string类
- 模拟实现string类
- 模拟实现string类
- 模拟实现String类
- Add Binary
- 关于Ubuntu下submit 中文输入问题的解决办法
- GOlang和LiteIDE在Win10环境64位中安装与配置教程(附链接)
- NFS 在Centos中安装
- PAT甲级 1019. General Palindromic Number (20)
- C++模拟string类
- ionic与Cordova的学习(补充)
- java并发编程实战-基础构建模块1
- python基础2之数据类型---列表
- 523. Continuous Subarray Sum
- SpringMVC数据绑定总结
- linux awk命令详解
- 欢迎使用CSDN-markdown编辑器
- android'为什么button在手机上会有阴影