C++常见笔试面试题目:string类的拷贝赋值运算符函数
来源:互联网 发布:30个php面试题 编辑:程序博客网 时间:2024/05/29 04:53
要求:写出一个String类的赋值运算符函数
注意事项:
(1)返回值的类型需声明为该类型的引用,并在函数结束前返回实例自身的引用(即*this),因为只有返回一个引用,才可以允许连续赋值。
(2)传入参数必须为常量的引用。常量确保在函数内不改变传入实例的状态,而引用避免调用复制构造函数,以提高代码的效率。
(3)判断传入的参数和当前实例是否是同一个实例,以免在此时出现删除自身内存的情况。
(4)释放实例自身已有的内存,避免出现内存泄露。
代码如下:
String& String::operator=(const String &another)//注意返回类型写在前面{ if(&another==this) { return *this; } delete [] m_data; m_data=NULL; m_data=new char[strlen(another.m_data)+1]; strcpy(m_data,another.m_data); return *this;}
另有考虑异常安全性的程序写法,该写法可以避免以下情况:在分配内存之前先delete了实例m_data的内存,而后续new char分配内存时内存不足,抛出异常,而此时m_data将是一个空指针,在后续使用中容易导致程序崩溃。
代码如下:
String& String::operator=(const String &another){ if(&another!=this) { String strTmp(another); char *tmp=strTmp.m_data; StrTmp.m_data=m_data; m_data=tmp; } return *this;}
补充:在笔试面试过程中,也经常考察对整个string类的编写,主要包括构造函数,析构函数,拷贝构造函数,拷贝赋值运算符等,需理解牢记。
代码如下:
class String{public: String (const char* str=NULL);//普通构造函数 String(const String &another);//拷贝构造函数 注意形参要是常量引用类型 ~String();//析构函数 String & operator=(const String &another);//拷贝赋值操作符 形参要是常量引用类型,返回引用类型private: char *m_data;};String::String(const char*str){ if(NULL==str) { m_data=new char; m_data='\0';//此处注意 } else { m_data=new char[strlen(str)+1]; strcpy(m_data,str); }}String::~String(){ delete [] m_data; m_data=NULL;}String::String (const String &another){ m_data=new char[strlen(another.m_data)+1]; strcpy(m_data,another.m_data);}String& String::operator=(const String &another)//注意返回类型写在前面{ if(&another==this) { return *this; } delete [] m_data; m_data=NULL; m_data=new char[strlen(another.m_data)+1]; strcpy(m_data,another.m_data); return *this;}
0 0
- C++常见笔试面试题目:string类的拷贝赋值运算符函数
- 面试题目6 编写类String的构造函数、拷贝构造函数、析构函数、赋值函数
- String类的构造函数、析构函数、拷贝构造函数、赋值运算符重载
- [互联网面试笔试汇总C/C++-9] 实现赋值运算符函数-剑指offer
- 实现字符串类String的设计,实现赋值运算符重载函数,默认、一般、拷贝构造函数,析构函数
- 类的赋值运算符重载和拷贝构造函数
- 拷贝构造函数,类的赋值运算符重载,深拷贝与浅拷贝
- 网易游戏笔试题:编写string类的构造函数、拷贝构造函数、赋值构造函数和析构函数
- [C++]拷贝构造函数和赋值运算符重载
- C/C++笔试面试常见题目2
- 拷贝构造函数与赋值运算符的重载函数
- String类赋值运算符函数
- C++读书笔记——拷贝构造函数,赋值运算符重载函数,转换构造函数(String类)
- 常见笔试/面试题目
- 类的构造函数、拷贝构造函数、赋值运算符和析构函数
- C++面试题,自己实现String类的构造函数,拷贝构造函数,赋值操作符,append,replace,+运算符重载等
- 重载赋值运算符与拷贝构造函数的区别
- 拷贝构造函数与赋值运算符重载的区别
- Android开发之判断是否相等
- ununtu14.04下显示器分辨率只有800*600和1024*768
- 网页布局中页面内容不足一屏时页脚footer固定底部
- ELK log4j kafka logstash elasticsearch系统搭建
- printf 高级用法
- C++常见笔试面试题目:string类的拷贝赋值运算符函数
- Android Camera开发
- 微信开发之入门教程
- 深度学习岗位要求
- google拓展应用
- jquery合并table相同单元格
- SkipList 跳跃表
- Kubernetes总体架构和应用创建流程
- centos7下yum安装MariaDB