[大学经典课堂课件]C++课件-面向对象高级编程第二部分.pptx
C++面向对象高级编程知识点 在本节课中,我们将探讨C++面向对象高级编程的相关知识点,着重于operator=的实现和自我赋值检测。 _operator=的实现 在C++中,operator=是赋值操作符,它用于将一个对象的值赋给另一个对象。在上面的代码中,我们可以看到String类的operator=的实现: ```cpp inline String& String::operator=(const String& str) { if (this == &str) return *this; delete[] m_data; m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(m_data, str.m_data); return *this; } ``` 在这个实现中,我们首先检查是否是自我赋值(self assignment),即检查this是否等于&str。如果是自我赋值,则直接返回*this,否则,我们删除之前的数据,分配新的内存空间,复制str的数据到当前对象中,最后返回*this。 自我赋值检测 在上面的代码中,我们可以看到自我赋值检测的实现: ```cpp String s1("hello "); String s2(s1); s2 = s1; ``` 在这里,我们首先创建了两个String对象s1和s2,并将s1的值赋给s2。然后,我们对s2进行赋值操作,检查是否是自我赋值。 Copy Assignment Operator 在C++中,copy assignment operator是将一个对象的值赋给另一个对象的操作符。我们可以看到,在上面的代码中,copy assignment operator的实现: ```cpp inline String& String::operator=(const String& str) { if (this == &str) return *this; delete[] m_data; m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(m_data, str.m_data); return *this; } ``` 这个实现中,我们首先检查是否是自我赋值,如果是自我赋值,则直接返回*this,否则,我们删除之前的数据,分配新的内存空间,复制str的数据到当前对象中,最后返回*this。 为什么要检测自我赋值 在上面的代码中,我们可以看到检测自我赋值的必要性。如果我们不检测自我赋值,将会出现以下问题: ```cpp String s1("hello "); String s2(s1); s2 = s1; ``` 在这里,如果我们不检测自我赋值,将会导致内存泄露,因为我们删除了之前的数据,但新的数据还没有被分配。这将导致程序崩溃。 总结 在本节课中,我们探讨了C++面向对象高级编程的相关知识点,着重于operator=的实现和自我赋值检测。我们学习了如何实现operator=,如何检测自我赋值,并了解了检测自我赋值的必要性。 在下一节课中,我们将继续探讨C++面向对象高级编程的其他知识点。































剩余55页未读,继续阅读


- 粉丝: 1346
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大数据技术在远程教育课程质量评估中的应用.docx
- Visual-basic教程7.ppt
- 电子商务中的安全问题及其对策研究.doc
- 电气自动化在电气工程中的应用剖析.docx
- 《软件开发基础》实验指导及实验题.doc
- (源码)基于Arduino的智能家居自动化管理系统.zip
- 建立高校教学质量计算机预警系统的探索.docx
- 羲谈网络环境下如何开展高校思想政治教育.docx
- CADCAM技术应用作业答案.doc
- 信息化时代对大学生的影响及能力要求.docx
- 电气工程及其自动化专业实训创新研究.docx
- 现代GIS技术及其在工程测量中的应用研究.docx
- 学习情境设计方案(C程序设计方案).doc
- 电气工程及其自动化相关问题探讨.docx
- MapGIS城镇土地调查管理使用手册整理版——采集建库篇(印刷版).doc
- 《JAVA语言程序设计方案》期末考试试题及答案1.doc


