String类的简易实现,用到了构造函数、析构函数、重载运算符、拷贝构造函数、友元函数等知识
参考资料:《高质量C++C编程指南》
运行平台:VS2008
#include<iostream>
using namespace std;
class String
{
public:
String(const char *str = NULL);
String(const String &other);
~String(void);
String & operator=(const String &other);
bool operator==(const String &str);
friend ostream & operator<<(ostream& o,const String &str);
private:
char *m_data;
};
/*
构造、析构、拷贝构造、赋值运、流输出运算
*/
String::String(const char *str)
{
if (str == NULL){
m_data = new char[1];
*m_data='\0';
}else{
int len=strlen(str);
m_data = new char[len+1];
strcpy(m_data,str);
}
}
String::~String(void)
{
delete [] m_data;
}
String::String(const String &other)
{
int len = strlen(other.m_data);
m_data = new char[len+1];
strcpy(m_data,other.m_data);
}
String & String::operator=(const String &other)
{
if (this == &other)
return *this;
delete []m_data;
int len = strlen(other.m_data);
m_data = new char[len+1];
strcpy(m_data,other.m_data);
return *this;
}
bool String::operator==(const String &str)
{
return strcmp(m_data,str.m_data) == 0;
}
ostream & operator<<(ostream &o,const String &str)
{
o<<str.m_data;
return o;
int main()
{
String s = "hello";
String s2 = s;
String ss = "hello";
cout<<"s = "<<s<<endl;
cout<<"s2 = "<<s2<<endl;
cout<<boolalpha<<(ss == s)<<endl;
}
运行结果:
s = hello
s2 = hello
true
请按任意键继续. . .
分享到:
相关推荐
C/C++面试题:编写类String的构造、析构和赋值函数 本文主要介绍了C/C++面试题:编写类String的构造、析构和赋值函数的编写方法,解析构造函数、析构函数和赋值函数的编写方法。 构造函数 构造函数是类的特殊成员...
1. **构造函数**:包括默认构造函数、拷贝构造函数以及接受C风格字符数组或另一个`String`对象的构造函数。 2. **赋值操作符**:覆盖`=`操作符,实现字符串的赋值功能。 3. **长度获取**:提供一个方法来获取字符...
strcpy 函数和类 String 的构造函数、析构函数、赋值函数和重载运算符函数都是软件开发中最基本的知识点,它们的实现需要注意内存的分配和释放、字符串的复制和赋值、运算符的语义和边界条件等多方面的考虑。
自己实现string函数功能 本文主要介绍了自己实现string函数的功能,其中...本文详细介绍了mystring类的实现过程,包括构造函数、拷贝构造函数、赋值运算符、加法运算符和析构函数的实现,以及在Main函数中的使用示例。
3. **拷贝构造和赋值操作符**:遵循C++的“规则 of three/five/zero”,根据类的资源管理情况实现拷贝构造、赋值操作符和析构函数。现代C++推荐使用移动语义,还需要考虑移动构造和移动赋值操作符。 4. **异常安全**...
- **拷贝构造函数**: ```cpp MyString::MyString(const MyString& str) { strLength = str.strLength; p_str = new char[strLength + 1]; strcpy(p_str, str.p_str); } ``` - **初始化构造函数**(通过...
2. **拷贝构造函数**:当一个对象作为另一个对象的初始值时调用,用于深拷贝数据。对于`string`类,确保字符数组被正确复制至关重要,防止悬挂指针。 ```cpp MyString(const MyString& other) { size_ = other....
本篇将深入探讨如何实现一个基本的C++ String类,以及涵盖的操作符重载、构造析构等核心知识点。 首先,`GGString.h`头文件通常会包含类的声明,定义类的结构、成员函数及友元函数。以下是一个简单的`GGString`类...
构造函数复制了指针但没有复制实际的字符串,拷贝构造函数和赋值运算符只是简单地将源对象的指针赋给目标对象。析构函数删除了指针所指向的字符串,但没有复制内容,这就导致了浅拷贝的问题。当两个对象指向同一字符...
2. **拷贝构造函数与赋值运算符**:这是C++中的深拷贝和浅拷贝问题,`String`类需要重载这两个来确保当一个`String`对象被复制时,底层的数据也得到正确处理。这涉及到动态内存管理,防止悬挂指针和内存泄漏。 3. *...
1. **构造函数与析构函数**:String类通常会提供默认构造函数(创建空字符串)、拷贝构造函数(用于深拷贝)和析构函数(释放内存)。这些函数确保了对象的正确初始化和销毁。 2. **数据成员**:String类的核心数据...
该类的主要目的是为了实现字符串的操作,如构造函数、析构函数、拷贝构造函数、赋值函数、字符串相连函数等。 二、运算符重载 在RString类中,我们重载了多个运算符,如“=”、“+”、“-”、“==”、“<”、“>”...
通过以上分析,我们可以看到这个自定义的`String`类虽然简单,但却涵盖了字符串类中最基础的操作:构造、析构、赋值等。这些操作是字符串类设计的基础,也是理解和实现更复杂字符串类的关键。当然,在实际应用中,...
该类具有多种构造函数、赋值函数、比较函数和析构函数等成员函数。下面对这些成员函数进行详细的解释: 1. 构造函数 String 类有多种构造函数,包括默认构造函数、拷贝构造函数和参数构造函数。默认构造函数将字符...
此外,在main函数中通过实例化String类的对象并进行赋值操作,验证了所实现的String类是否能够正确完成构造、拷贝和赋值等操作,同时展示了如何通过cout输出语句来观察对象构造和析构的调用情况。 C++实现String类...
标题提到的“自己写了个string类”,意味着作者创建了一个类似于C++标准库中的`std::string`的自定义字符串类。这样的练习有助于深入理解字符串的内部工作原理、内存管理和对象操作。下面我们将详细探讨这个话题。 ...
* `string s(str)`: 拷贝构造函数,生成 `str` 的复制品。 * `string s(str, stridx)`:将字符串 `str` 内"始于位置 `stridx`"的部分当作字符串的初值。 * `string s(str, stridx, strlen)`: 将字符串 `str` 内"始于...
* `string s(str)`: 拷贝构造函数,生成 str 的复制品 * `string s(str, stridx)`: 将字符串 str 内“始于 stridx”的部分作为字符串的初值 * `string s(str, stridx, strlen)`: 将字符串 str 内“始于 stridx 且...
C++ String 详解的构造函数和析构函数有多种形式,包括无参构造函数、拷贝构造函数、字符串构造函数等。用户可以根据需要选择合适的构造函数来创建字符串对象。 C++ String 详解的操作函数有很多,如赋值、比较、...