`

编写类String的构造函数、析构函数和赋值函数

    博客分类:
  • C++
阅读更多
这个在面试或笔试的时候常问到或考到。

已知类String的原型为:
class String
{
public:
     String(const char *str = NULL);// 普通构造函数
     String(const String &other);    // 拷贝构造函数
     ~ String(void);    // 析构函数
     String & operate =(const String &other);// 赋值函数
private:
     char *m_data;// 用于保存字符串
}; 

请编写String的上述4个函数。

//普通构造函数
String::String(const char *str)
{
        if(str==NULL)
        {
                m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志'\0'的//加分点:对m_data加NULL 判断
                *m_data = '\0';
        }    
        else
        {
         int length = strlen(str);
         m_data = new char[length+1]; // 若能加 NULL 判断则更好
         strcpy(m_data, str);
        }
} 
// String的析构函数
String::~String(void)
{
        delete [] m_data; // 或delete m_data;
}
//拷贝构造函数
String::String(const String &other)    // 得分点:输入参数为const型
{     
        int length = strlen(other.m_data);
        m_data = new char[length+1];     //加分点:对m_data加NULL 判断
        strcpy(m_data, other.m_data);    
} 
//赋值函数
String & String::operate =(const String &other) // 得分点:输入参数为const

型
{     
        if(this == &other)                    //得分点:检查自赋值
                return *this;   
        delete [] m_data;                //得分点:释放原有的内存资源
        int length = strlen( other.m_data );      
        m_data = new char[length+1];  //加分点:对m_data加NULL 判断
        strcpy( m_data, other.m_data );   
        return *this;             //得分点:返回本对象的引用  

}


剖析:

能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经具备了C++基本功的60%以上!在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样就具备了60%以上的C++基本功!
分享到:
评论
1 楼 cartoonboy 2010-04-22  
这里有些不理解的是strlen()函数从哪里调用的?

相关推荐

    编写类String 的构造函数、析构函数和赋值函数.docx

    本题主要考察的是如何为一个名为`String`的类编写构造函数、拷贝构造函数、析构函数以及赋值运算符。下面将详细解释这些函数的作用以及如何实现它们。 1. **构造函数**: - `String(const char *str = NULL)` 是一...

    编写strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数[文].pdf

    strcpy 函数和类 String 的构造函数、析构函数、赋值函数和重载运算符函数 strcpy 函数是 C 语言中最基本的字符串拷贝函数,它的原型是 `char *strcpy(char *strDest, const char *strSrc);`,其中 `strDest` 是...

    详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数

    详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数  编写类String 的构造函数、析构函数和赋值函数,已知类String 的原型为: class String { public: String(const char *str = NULL); // 普通...

    编写strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数

    主要包含了strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数等代码实现。

    编写类String的构造函数

    根据给定的文件信息,我们将深入探讨如何实现一个自定义的`String`类,并重点讲解其构造函数、析构函数、拷贝构造函数以及赋值操作符。在C++编程语言中,这些成员函数对于正确地管理动态分配的内存至关重要。 ### ...

    高质量C++C编程指南 - 第9章 类的构造函数、析构函数与赋值函数.pdf

    "高质量C++编程指南 - 第9章 类的构造函数、析构函数与赋值函数" 本章主要介绍了C++类中的三个基本函数:构造函数、析构函数与赋值函数。这些函数看似简单,但如果不正确地使用它们,可能会导致程序出错。 首先,...

    C/C++面试题:编写类String的构造、析构和赋值函数

    本文主要介绍了C/C++面试题:编写类String的构造、析构和赋值函数的编写方法,解析构造函数、析构函数和赋值函数的编写方法。 构造函数 构造函数是类的特殊成员函数,用来初始化类的对象。构造函数的名称与类名...

    C++构造函数[定义].pdf

    总之,理解并正确使用构造函数、析构函数以及赋值函数是C++编程中的关键技能,它们对对象生命周期的管理和资源的有效管理起着至关重要的作用。不重视这些函数的细节可能导致难以预料的程序行为和内存泄漏。因此,...

    string的常用函数

    #### 二、构造函数与析构函数 `std::string` 类提供了多种构造方法来创建字符串对象: 1. **默认构造函数**:`std::string s;` 创建一个空字符串。 2. **拷贝构造函数**:`std::string s(str);` 创建一个新的字符...

    自己实现string函数功能

    析构函数mystring::~mystring()用于释放m_data所占用的内存空间,以避免内存泄露。 在Main函数中,我们使用了mystring类,演示了如何使用mystring对象并调用其成员函数。我们创建了三个mystring对象str1、str2和str...

    面向设计c++类与对象的使用

    析构函数`~student`用于清理对象所使用的资源,特别是在这里释放之前动态分配的内存。 ```cpp student::~student() { delete[] num; delete[] name; } ``` - **释放内存**:使用`delete[]`操作符释放之前通过`...

    c++编写String类代码实例

    下面将详细介绍 C++ 编写 String 类的代码实例,包括普通构造函数、拷贝构造函数、析构函数、赋值函数、重载 + 号和 = 号等操作符。 1. 普通构造函数 在 C++ 中,String 类的普通构造函数用于初始化字符串对象。该...

    用c++实现的String类

    3. **析构函数**:释放动态分配的内存,防止内存泄漏。 4. **运算符重载**:为了提供与C++内置字符串类似的接口,我们需要重载常见的操作符,如`+`(拼接)、`=`(赋值)、`[]`(下标访问)等。 5. **成员函数**:...

    自己写的String类

    通过编写自己的`String`类,开发者可以深入理解C++的内存管理、构造函数和运算符重载等核心概念。同时,这也是一个很好的机会去实践C++的编码风格和良好的编程习惯。在初学阶段,这将有助于为更复杂的编程挑战打下...

    高质量C++编程指南

    - **示例:类STRING的构造函数与析构函数**:通过一个字符串类的例子来展示构造函数和析构函数的设计方法。 - **不要轻视拷贝构造函数与赋值函数**:强调了拷贝构造函数和赋值函数的重要性,避免潜在的问题。 - **...

    c++ classes

    以上总结了C++类的基本知识点,包括类的定义、成员变量和函数、构造函数与析构函数、初始化列表、以及模板类的概念。在实际编程中,深入理解这些概念并恰当运用,对于写出高质量的C++代码至关重要。

Global site tag (gtag.js) - Google Analytics