💓博主优快云主页:Am心若依旧💓
🌹关注我🫵带你学习更多c++
🔝🔝
1.前言
本章重点
本章主要介绍一些关键接口的模拟实现,例如:构造函数,拷贝构造函数,析构函数,赋值重载函数,插入删除函数等等。
2.默认成员函数
在实现默认成员函数之前,先确定成员变量
namespace wzz
{
class string
{
private:
char* _str;//用一个字符数组来模拟string
size_t _size;//数组中实际有效的个数
size_t _capacity;//数组中容量的大小
static const size_t npos;//静态成员变量来表示最大值
};
const string::size_t npos=-1;//静态成员变量在类内声明,在类外定义
}
1.默认构造函数--当没有传值的时候,就用一个缺省值来代替--这个缺省值用空字符串代替
string (const char* str="")
{
_str=new char[_capacity+1];
_size=strlen(str);
_capacity=_size;//初始时,容量就让其等于有效元素的个数
strcpy(_str,str);
}
补充迭代器构造
template <class Inputeiterrator>
string(Inputeiterator begin,Inputeriterator end)
{
while(begin!=end)
{
push_back(*begin);
begin++;
}
}
2.拷贝构造函数--用一个char*来初始化另一个char*
在这里会详细介绍深浅拷贝--后续就不在重点介绍了
浅拷贝:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间。其中一个对象的改动会对另一个对象造成影响。
深拷贝:深拷贝是指源对象与拷贝对象互相独立。其中任何一个对象的改动不会对另外一个对象造成影响。
很明显,深拷贝比浅拷贝更加安全,不会有同一块空间析构两次的问题。 这里拷贝构造就介绍两种写法
法一:开辟一块空间,然后把数据拷贝过来--如下图