1.防卫式声明
2.类的设计
2.1 需要什么样的数据
字符串需要放很多字符
放数组,数组里面放字符?不可行,数组大小难以确定。
那么就在数据区域放一根指针,将来字符串需要多大,可以用new动态分配一块内存
2.2 需要准备哪些函数开放给外界调用?
(1)构造函数(放在public,和class同名,没有返回类型,接收怎样的初值,有无默认值,能否改变值)
(2)big three(先设计接口)
1.拷贝构造函数(没有返回类型,蓝本为自己相同类型,传引用,加const?)
2.拷贝赋值函数(来源端是什么,是否改变,目的端是什么,传引用->函数执行的结果放到的地方是否为local object?)
目的端本来就存在了,不需要再函数中创建local object,所以是传引用
3.析构函数
(3)辅助函数
由于字符串需要丢到cout,cout是可以接收指针的,所以需要一个函数来返回指针
函数很简单,可以直接写在public,函数有改动吗?没有,加const
2.3 body之外的函数设计
(1)构造函数的设计
由于是body外,需要写全名,String::这种形式 ,还有inline别忘了
判断传进来的指针是否有值
用 new 动态分配足够大的空间给指针指向的区域
把传进来的初值拷贝给刚刚分配的空间
送入的为0,则new一个数组放入结束符
(2)析构函数(把自己清理干净)
由于分配了空间,所以要清空掉,注意array new和 array delete搭配使用
(3)拷贝构造函数
没有返回类型,来源端当成蓝本拷贝到目的端
(4)拷贝赋值函数
函数名(成员函数哦),参数列,返回类型,内联
目的端先把自己杀掉,重新分配足够空间,把来源端拷贝到目的端
需要return哦,因为会有连串赋值的情况
最重要的:判断是否是自我赋值!!!