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

来源:互联网 发布:财达证券交易软件 编辑:程序博客网 时间:2024/05/09 17:27

用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 0
原创粉丝点击