String类的设计笔记----C++学习之路

  1.防卫式声明

  2.字符串是大小不固定的,那就是用指针来动态分配内存,用new的方式动态分配一个内存,所以在private中应该是一个char* m_data;

  3.接下来准备构造函数,放在public里,构造函数与class同名。String(const char* cstr=0);给予默认值0;

  4.类内带有指针,就要去考虑三个特殊函数:

拷贝构造(String (const String& str);)  

拷贝赋值(String& operator=(const String& str);)

析构函数(~String();)

  5.取字符串 char* get_c_str() const {return m_data;};

  6.ctor:放在class本体外来写。

    构造函数的步骤:分配空间,转型(编译器),传参。别忘记判断传入的是否有效。

String::String(const char* cstr = 0)
{
    if(cstr)
        {
             m_data=new char[strlen(cstr)+1];
            stcpy(m_data,cstr);
        }
    else
        {
            m_data=new char[1];
            *m_data='/0';
        }
}
  7.dtor:放在本体外来写,尽量写上inline

String::~String()
{
    delete[] m_data;
}
  8.copy ctor(拷贝构造)

拷贝构造就是来源端拷贝到目的端,分配空间,再拷贝,代码如下:也希望成为内敛函数,代码没加inline

String::String(const String& str)
{
    m_data=new char[strlen(str.m_data)+1];
    strcpy(m_data,str.m_data);
}
关于inline什么时候加,什么情况都能加,编译器会自己判断,没有不好的影响。

  9.拷贝赋值

inline
String& String::operator=(const String& str)
{
    if(this==&str)
        return *this;
    delete[] m_data;
    m_data=new char[strlen(str.m_data)+1];
    strcpy(m_data,str.m_data);
    return *this;
}
关于拷贝赋值的返回值,为什么是String&而不是void:假设赋值语句a=b;这句话不管是String&还是void,都是没问题,但是如果是a=b=c;那么就会出错。

以及String&与&str两个&符号的含义,一个是引用,一个是取地址。在我的学习笔记有记录:指针与引用

以及良好的习惯,需要判断是否自我赋值,若没有,不仅是效率问题,也可能会出错。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值