注意的问题书上讲的很详细了

下面是代码实现,但是VS有一个问题,strcpy安全性较低,虽然可以通脱编译,但是运行会报错,提示用strcpy_s()替代,但是,这里用strcpy()替代也不行,

  1 //题目:如下为类型CMyString的声明,请为该类型添加赋值运算符
  2 //以下为完整代码和测试用例
  3 #pragma warning(disable:4996)
  4 #include <iostream>
  5 #include <cstring>
  6 using namespace std;
  7 class CMyString {
  8 public:
  9     CMyString(char* pData = nullptr);
 10     CMyString(const CMyString& str);
 11     ~CMyString(void);
 12     // operator "="
 13     CMyString& operator =(const CMyString& str);
 14     void print();//用来输出测试结果
 15 private:
 16     char*m_pData;
 17 };
 18
 19 //the defination of the constructor fun
 20 CMyString::CMyString(char* pData)
 21 {
 22     if (pData == nullptr)
 23         m_pData = new char[1];
 24     m_pData[0] = '\0';
 25 }
 26
 27 CMyString::CMyString(const CMyString& str)
 28 {
 29     int len = strlen(str.m_pData);
 30     m_pData = new char[len + 1];
 31     //m_pData(str.m_pData);
 32     strcpy(m_pData, str.m_pData);
 33
 34 }
 35
 36 CMyString::~CMyString()
 37 {
 38     //delete m_pData[];
 39     delete[]m_pData;
 40 }
 41
 42 CMyString& CMyString:: operator =(const CMyString &str)
 43 {
 44     if (this == &str);
 45     return *this;
 46
 47     delete[]m_pData;
 48     m_pData = nullptr;
 49
 50     m_pData = new char[strlen(str.m_pData) + 1];
 51     strcpy(m_pData, str.m_pData);
 52     return *this;
 53
 54 }
 55
 56 void CMyString:: print()
 57 {
 58     cout << m_pData << endl;
 59 }
 60 //测试用例
 61
 62 void test1()
 63 {
 64     char* str = "Hello World!";
 65     CMyString str1(str);
 66     CMyString str2;
 67     str2 = str1;//call CMystring& operator=(const CMyString& str)
 68     cout << " str is : " << str << endl;
 69     //cout << "str2 is : " << str2.print() << endl;//没有重载<<运算符,还不能用
 70     cout << "after 赋值" <<"str2 is : "<< endl;
 71     str2.print();
 72  }
 73
 74 void test2()//赋值给自己
 75 {
 76     char* str = "Hello world!";
 77     CMyString str1(str);
 78     str1=str1;
 79     cout << " str is : " << str << endl;
 80
 81     cout << "after 赋值" << "str1 is : " << endl;
 82     str1.print();
 83
 84 }
 85
 86 void test3()//连续赋值
 87 {
 88     char* str = "Hello World!";
 89     CMyString str1(str);
 90     CMyString str2, str3;
 91     str3 = str2 = str1;
 92     cout << "str1 is : " << endl;
 93     str1.print();
 94     cout << "str2 is : " << endl;
 95
 96     str2.print();
 97     cout << "str3 is : " << endl;
 98     str3.print();
 99 }
100
101
102 int main()
103 {
104     test1();
105     test2();
106     test3();
107     system("pause");
108     return 0;
109 }

转载于:https://www.cnblogs.com/Holly-blog/p/7586781.html

question1 赋值运算操作符相关推荐

  1. 读书笔记 Effective C++: 02 构造析构赋值运算

    条款05:了解C++默认编写并调用的哪些函数 编译器会为class创建: 1. default构造函数(前提是:没有定义任何构造函数): 如果已经声明了一个构造函数,编译器就不会再创建default构 ...

  2. Python数字类型:数值运算操作符、数值运算函数、类型判断函数、类型转换函数

    一.数字类型 (一)整数类型int(integer) int与数学中的整数概念一致 特点:可正可负,没有取值范围 整数有四种表示形式: 十进制,没有引导符号:10, 88,-485 二进制,以0(零) ...

  3. python数值运算操作符也叫做内置操作符_Python的操作符 - osc_r1gtal48的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.数值运算符 python提供了9个基本的数值运算符,这些运算符由编译器直接提供,所以叫做内置运算符(操作符): 运算符 功能 + 加 - 减 * 乘 / 除 % 模 ** 幂 // 整除 -i 负 ...

  4. python 中m op n运算_Python数字类型、数值运算操作符、数值运算函数

    一.数字类型 (一)整数类型int(integer) int与数学中的整数概念一致 特点:可正可负,没有取值范围 整数有四种表示形式: 十进制,没有引导符号:10, 88,-485 二进制,以0(零) ...

  5. Python数值运算操作符

    数值运算操作符 操作符及使用 描述 x+y 加,x与y之和 x–y 减,x与 y之差 x*y 乘,x与y之积 x/y 除,x与y之商 10/3结果是3.3333333333333335 x // y ...

  6. python提供了几个基本的数值运算操作符_慢步学习,二级python,数字类型及其运算...

    #我要学Python# 记得曾经的老师常说,要带着问题学习. 咱继续带着二级Python编程语言的考试大纲学习. 考试大纲中考试内容分七部分,其中第一部分Python 语言基本语法元素已经学完.笔者认 ...

  7. 构造/析构/赋值运算--龙之介《Effective C++》实验室

    条款5:了解C++默默编写并调用哪些函数 编译器可以暗自为class创建default构造函数,copy构造函数,copy assignment操作符 但是c++拒绝编译那一行赋值动作.你不会自动co ...

  8. Python中的数学运算操作符使用进阶

    原文链接:https://www.jb51.net/article/86988.htm 这篇文章主要介绍了Python中的数学运算操作符使用进阶,也包括运算赋值操作符等基本知识的小结 Python中对 ...

  9. 增一赋值运算 减一赋值运算

    C语言提供了两种非常有用的运算符就是增一和减一运算符 增一运算符是用两个加号来表示的 增一运算的作用使参与运算的值增加一个单位 增一和减一运算符都是一元运算,只需要一个操作数 它既可以作为前缀运算符, ...

最新文章

  1. leetcode--整数反转--python
  2. java 数据聚合_Java数据聚合问题请教?
  3. python用于pmc排产可以吗_生产计划员每天都在抓狂,插单、排产问题到底该怎么解决?...
  4. OLI 课程 Java入学考试的五道题
  5. javascript --- vue中简单的模板渲染
  6. drools 规则流_约束流–没有Drools规则语言的现代Java约束
  7. 系统修复对电脑的影响有哪些
  8. golang 最小堆排序实现
  9. Spring IoC、应用上下文容器层次分析
  10. 双管道(CreatePipe)与本地cmd.exe进程通信(附源代码及编译好的程序,免费下载)
  11. webstorm搜狗输入法变成繁体字
  12. RHCSA 知识点汇总
  13. D-Link DCS系列监控账号密码信息泄露
  14. C++ using的使用
  15. CRMED知识付费2.0源码 已去授权
  16. 【程序员的财富自由之路】开篇序
  17. 段永平-雪球专刊·段永平投资问答录(上册 商业逻辑篇)(一)
  18. 智能手机屏幕常用单位浅析
  19. 洛谷P3803 fft模板
  20. matlab雨流计数,matlab雨流计数法

热门文章

  1. flash作业_在线作业产品的基本构成与逻辑分解
  2. 利用itext包实现java报表打印_利用iText包实现Java报表打印
  3. java 参数类型可变_java – 具有可变类型参数的通用
  4. java 线程 内部_从Java中的main()内部在线程实例上运行wait()
  5. java 内嵌机制_[转] Java中public,private,final,static等概念的解读
  6. java jdbc_详解Java基础知识——JDBC
  7. 在线分析mysql死锁详解_记一次线上mysql死锁分析(一)
  8. JavaScript常用事件(1)
  9. linux 配置mq队列,Apache ActiveMQ 消息队列安装与配置
  10. 操作系统—多生产者多消费者问题