用String类的实验,说明拷贝构造函数、重载等号赋值函数、和普通构造函数的区别

用String类的实验,说明拷贝构造函数、重载等号赋值函数、和普通构造函数的区别

看程序员面试宝典,对其中的一个问题很感兴趣。就是编写一个String的构造函数、析构函数和赋值函数。这个问题虽然很简单,但是这些简单的问题中,包含了许多我们需要了解的基础知识。我的答案如下

//String.h

#define NULL 0

class String

{

public:

     String(constchar *str = NULL);

     String(constString &other);

     ~String(void);

     String operator=(const String &other);

     intGetLength();

private:

     char*m_data;

};

这里要注意运算符等号的重载GetLength()函数是编写,用来测试我String类的是否正确。

以上函数声明包含了String类的一些必备操作功能。

最为简单的拷贝构造函数

String(const String &other);

普通构造函数

String(const char *str =NULL);

重载等号赋值函数

Stringoperator =(constString &other);

具体函数源文件如下:

//String.cpp

#include <iostream>

using namespace std;

#include "String.h"

String::~String()

{

     if(NULL!= m_data)

     {

         delete[] m_data;

     }

}

String::String(const char *str)

{

     if(NULL== str)

     {

         /*m_data= new char[1];

         *m_data ='\0';*/

          m_data= NULL;

     }

     else

     {

         intlength = strlen(str);

         m_data = new char[length+1];

         strcpy(m_data,str);

     }

}

String::String(const String &other)

{

     intlength = strlen(other.m_data);

     m_data = new char[length+1];

     strcpy(m_data,other.m_data);

}

String  String::operator =(constString &other)

{

     if(this == &other)

         return*this;

     delete[] m_data;

     intlength = strlen(other.m_data);

     m_data = new char[length+1];

     strcpy(m_data,other.m_data);

     return*this;

}

int String::GetLength()

{

     if(NULL== m_data)

     {

         return0;

     }

     else

     {

         intlength = strlen(m_data);

         returnlength+1;

     }

}

测试用的main函数,打上断点即可看到类是否正确。

//main.cpp

#include "String.h"

void main(void)

{

     String String1("J");

     intlength=String1.GetLength();

     String String2;

     length=String2.GetLength();

     String2 = String1;

     length=String2.GetLength();

//   String S

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大牛攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值