热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++賦值函數代碼詳解

作為一個經驗豐富的編程人員,想必對C++編程語言一定有所了解。因為這一語言已經成為開發領域中一個重要的應用語言。下面大家可以根據本文對C++賦值函數的理解,進一步加深對C++語言的了解程度。C++的拷

作為一個經驗豐富的編程人員,想必對C++編程語言一定有所了解。因為這一語言已經成為開發領域中一個重要的應用語言。下面大家可以根據本文對C++賦值函數的理解,進一步加深對C++語言的了解程度。

C++的拷貝函數和C++賦值函數既有聯系又有區別,不細究的話很容易搞混,遂以小例示之如下,權作解惑之用。

C++賦值函數相關代碼示例:

  1. // test.cpp  
  2. #include  
  3. #include  
  4. #include  
  5. using namespace std;  
  6. class Book  
  7. {  
  8. public:  
  9. Book(const char *name, const char*author, const double price): 
    price(price) {  
  10. this->name = new char[strlen(name)+1];  
  11. this->author = new char[strlen(author)+1];  
  12. strcpy(this->name, name);  
  13. strcpy(this->author,author);  
  14. }  
  15. Book(const Book& book){  
  16. name = new char[strlen(book.name)+1];  
  17. author = new char[strlen(book.author)+1];  
  18. price = book.price;  
  19. strcpy(name, book.name);  
  20. strcpy(author, book.author);  
  1. Book& operator=(const Book& rhs) {  
  2. Book(rhs).swap(*this); // 先創建臨時對象Book(rhs), 
    再調用下面的swap進行數據交換,  
  3. // 注意與*this交換數據的是臨時對象, rhs並未修改,只是swap  
  4. // 結束後臨時對象擁有了*this的數據, 而*this也擁有了由rhs  
  5. // 構造的臨時對象的數據, 臨時對象生命期結束時,*this的數據  
  6. // 會被銷毀www.aspphp.online。  
  7. return *this;   
  8. }  
  9. ~Book(){  
  10. delete[] name;  
  11. delete[] author;  
  12. }  
  13. private:  
  14. Book& swap(Book& rhs) {  
  15. double temp = rhs.price;  
  16. rhs.price = price;  
  17. price = temp;  
  18. std::swap(name, rhs.name); 
    // std::swap()只是簡單的交換指針的值  
  19. std::swap(author, rhs.author);  
  20. return *this;  
  21. }  
  22. public:  
  23. char* name;  
  24. char* author;  
  25. double price;  
  26. };  
  27. int main() {  
  28. Book a("The C++ standard library", "Nicolai M. Josuttis", 98);  
  29. Book b = a; // 對象b不存在, 拷貝構造函數在這裡被調用  
  30. Book c("Emacs Lisp manual", "stallman", 0);  
  31. c = a; // c對象已經存在, C++賦值函數(operator=)在這裡被調用  
  32. cout << a.name << endl;  
  33. cout << a.author << endl;  
  34. cout << a.price << endl << endl;  
  35. cout << b.name << endl;  
  36. cout << b.author << endl;  
  37. cout << b.price << endl << endl;  
  38. cout << c.name << endl;  
  39. cout << c.author << endl;  
  40. cout << c.price << endl;  

編譯:

  1. g++ -o test test.cpp 

運行結果:

  1. The C++ standard library  
  2. Nicolai M. Josuttis  
  3. 98  
  4. The C++ standard library  
  5. Nicolai M. Josuttis  
  6. 98  
  7. The C++ standard library  
  8. Nicolai M. Josuttis  
  9. 98 

以上就是對C++賦值函數的相關介紹。

 

 

 

 
     
推荐阅读
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • C++中没有提供string类型的大小写转换,今天写了一下,方法很多#include<iostream>#include<string>#inclu ... [详细]
  • ImimplementingacustomlexerinC++andwhenattemptingtoreadinwhitespace,theifstreamwont ... [详细]
  • wyh2000andastringproblemTimeLimit:20001000MS(JavaOthers)MemoryLimit:13107265 ... [详细]
  • 本周课程涵盖了高精度计算、前缀和及差分技术。在高精度计算部分,我们将探讨如何处理任意进制的数值运算,包括但不限于正数的加法、减法和乘法。通过调整基数,可以灵活应对不同进制的需求。前缀和与差分技术则主要用于高效解决数组和区间查询问题,提升算法性能。 ... [详细]
  • Prim算法在处理稠密图时表现出色,尤其适用于边数远多于顶点数的情形。传统实现的时间复杂度为 \(O(n^2)\),但通过引入优先队列进行优化,可以在点数为 \(m\)、边数为 \(n\) 的情况下显著降低时间复杂度,提高算法效率。这种优化方法不仅能够加速最小生成树的构建过程,还能在大规模数据集上保持良好的性能表现。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • [TyvjP1050] 动态规划求解最长公共子序列问题
    在解决最长公共子序列问题时,动态规划是一种高效的方法。具体而言,我们使用二维数组 `dp[i][j]` 来表示第一个字符串匹配到第 `i` 位,第二个字符串匹配到第 `j` 位时的最长公共子序列长度。状态转移方程为:当两个字符相等时,`dp[i][j] = dp[i-1][j-1] + 1`;否则,`dp[i][j] = max(dp[i-1][j], dp[i][j-1])`。通过这种方法,我们可以有效地计算出两个字符串的最长公共子序列。 ... [详细]
  • 使用cpphttplib构建HTTP服务器以处理带有查询参数的URL请求 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • C++ 进阶:类的内存布局与虚函数类的实现细节
    C++ 进阶:类的内存布局与虚函数类的实现细节 ... [详细]
  • 本文详细探讨了C语言中`extern`关键字的简易编译方法,并深入解析了预编译、`static`和`extern`的综合应用。通过具体的代码示例,介绍了如何在不同的文件之间共享变量和函数声明,以及这些关键字在编译过程中的作用和影响。文章还讨论了预编译过程中宏定义的使用,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
author-avatar
二十三点二十三分_465
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有