这个在面试或笔试的时候常问到或考到。
已知类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++基本功!
分享到:
相关推荐
本题主要考察的是如何为一个名为`String`的类编写构造函数、拷贝构造函数、析构函数以及赋值运算符。下面将详细解释这些函数的作用以及如何实现它们。 1. **构造函数**: - `String(const char *str = NULL)` 是一...
strcpy 函数和类 String 的构造函数、析构函数、赋值函数和重载运算符函数 strcpy 函数是 C 语言中最基本的字符串拷贝函数,它的原型是 `char *strcpy(char *strDest, const char *strSrc);`,其中 `strDest` 是...
详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数 编写类String 的构造函数、析构函数和赋值函数,已知类String 的原型为: class String { public: String(const char *str = NULL); // 普通...
主要包含了strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数等代码实现。
根据给定的文件信息,我们将深入探讨如何实现一个自定义的`String`类,并重点讲解其构造函数、析构函数、拷贝构造函数以及赋值操作符。在C++编程语言中,这些成员函数对于正确地管理动态分配的内存至关重要。 ### ...
"高质量C++编程指南 - 第9章 类的构造函数、析构函数与赋值函数" 本章主要介绍了C++类中的三个基本函数:构造函数、析构函数与赋值函数。这些函数看似简单,但如果不正确地使用它们,可能会导致程序出错。 首先,...
本文主要介绍了C/C++面试题:编写类String的构造、析构和赋值函数的编写方法,解析构造函数、析构函数和赋值函数的编写方法。 构造函数 构造函数是类的特殊成员函数,用来初始化类的对象。构造函数的名称与类名...
总之,理解并正确使用构造函数、析构函数以及赋值函数是C++编程中的关键技能,它们对对象生命周期的管理和资源的有效管理起着至关重要的作用。不重视这些函数的细节可能导致难以预料的程序行为和内存泄漏。因此,...
#### 二、构造函数与析构函数 `std::string` 类提供了多种构造方法来创建字符串对象: 1. **默认构造函数**:`std::string s;` 创建一个空字符串。 2. **拷贝构造函数**:`std::string s(str);` 创建一个新的字符...
析构函数mystring::~mystring()用于释放m_data所占用的内存空间,以避免内存泄露。 在Main函数中,我们使用了mystring类,演示了如何使用mystring对象并调用其成员函数。我们创建了三个mystring对象str1、str2和str...
析构函数`~student`用于清理对象所使用的资源,特别是在这里释放之前动态分配的内存。 ```cpp student::~student() { delete[] num; delete[] name; } ``` - **释放内存**:使用`delete[]`操作符释放之前通过`...
下面将详细介绍 C++ 编写 String 类的代码实例,包括普通构造函数、拷贝构造函数、析构函数、赋值函数、重载 + 号和 = 号等操作符。 1. 普通构造函数 在 C++ 中,String 类的普通构造函数用于初始化字符串对象。该...
3. **析构函数**:释放动态分配的内存,防止内存泄漏。 4. **运算符重载**:为了提供与C++内置字符串类似的接口,我们需要重载常见的操作符,如`+`(拼接)、`=`(赋值)、`[]`(下标访问)等。 5. **成员函数**:...
通过编写自己的`String`类,开发者可以深入理解C++的内存管理、构造函数和运算符重载等核心概念。同时,这也是一个很好的机会去实践C++的编码风格和良好的编程习惯。在初学阶段,这将有助于为更复杂的编程挑战打下...
- **示例:类STRING的构造函数与析构函数**:通过一个字符串类的例子来展示构造函数和析构函数的设计方法。 - **不要轻视拷贝构造函数与赋值函数**:强调了拷贝构造函数和赋值函数的重要性,避免潜在的问题。 - **...
以上总结了C++类的基本知识点,包括类的定义、成员变量和函数、构造函数与析构函数、初始化列表、以及模板类的概念。在实际编程中,深入理解这些概念并恰当运用,对于写出高质量的C++代码至关重要。