C++面试之 类string的构造函数、拷贝构造函数和析构函数

简介: 编写类String 的构造函数,析构函数,拷贝构造函数和赋值函数class String {public: String(const char *str=NULL);//构造函数 String(const String &other);//拷贝构造函数...

编写类String 的构造函数,析构函数,拷贝构造函数和赋值函数

class String 
{
public:
    String(const char *str=NULL);//构造函数
    String(const String &other);//拷贝构造函数
    ~String(void);//析构函数
    String& operator=(const String &other);//等号操作符重载
    ShowString();
private:
    char *m_data;//指针
};

String::~String()
{
  delete[] m_data;//析构函数,释放地址空间
}
String::String(const char *str)
{
    if (str==NULL)//当初始化串不存在的时候,为m_data申请
    {
       m_data = new char[1];
       *m_data='\0';
    }else
    {
        int length = strlen(str);
        m_data = new char[length+1];
        strcpy(m_data,str);
    }
}

String::String(const String &other)//拷贝构造函数
{
    int length = strlen(other.m_data);
    m_data = new char[length+1];
    strcpy(m_data,other.m_data);
}

String& String::operator=(const String &other)
{
    if (this==&other)
    {
        return *this;
    }
    delete []m_data;
    int length = strlen(other.m_data);
    m_data=new char[length+1];
    strlen(m_data,other.m_data);
    return *this;
}

注意:
1.拷贝构造函数和等号操作符重载函数参数用“&”表示深拷贝。深拷贝和浅拷贝也是一个重要的知识点.

相关文章
|
16天前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
18 0
|
3天前
|
C++
什么是析构函数,它在C++类中起什么作用
什么是析构函数,它在C++类中起什么作用?
20 11
|
3天前
|
C++
能不能说一个C++类的简单示例呀?能解释一下组成部分更好了
能不能说一个C++类的简单示例呀?能解释一下组成部分更好了
25 10
|
7天前
|
C++
C++ string中的函数和常用用法
C++ 中string中的函数和常用用法
16 4
|
15天前
|
设计模式 安全 编译器
【C++11】特殊类设计
【C++11】特殊类设计
36 10
|
20天前
|
C++
C++友元函数和友元类的使用
C++中的友元(friend)是一种机制,允许类或函数访问其他类的私有成员,以实现数据共享或特殊功能。友元分为两类:类友元和函数友元。类友元允许一个类访问另一个类的私有数据,而函数友元是非成员函数,可以直接访问类的私有成员。虽然提供了便利,但友元破坏了封装性,应谨慎使用。
46 9
|
15天前
|
存储 编译器 C语言
【C++基础 】类和对象(上)
【C++基础 】类和对象(上)
|
16天前
|
安全 Java 开发者
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
19 1
|
16天前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
26 1
|
23天前
|
C语言 C++
【C++】string模拟实现(下)
本文档介绍了自定义`string`类的一些关键功能实现,包括`reserve()`用于内存管理,`push_back()`和`append()`添加字符或字符串,运算符`+=`的重载,以及`insert()`, `erase()`进行插入和删除操作。此外,还涵盖了`find()`查找函数,字符串的比较运算符重载,`substr()`获取子串,`clear()`清除内容,以及流插入和提取操作。常量`npos`用于表示未找到的标记。文档以代码示例和运行结果展示各功能的使用。