cc21a重载成员操作符*,->,

*,解引用操作符

->箭头操作符,用于智能指针类

  1. #include "pointer.h" //pointer.cpp
  2. #include "string.h"
  3.  
  4. Pointer::Pointer() :ptr() {}
  5.  
  6. Pointer::Pointer(String const &n)
  7. {
  8. ptr = new String(n); //ptr指针指向String
  9. }
  10. Pointer::~Pointer()
  11. {
  12. delete ptr;
  13. }
  14. String Pointer::errorMessage("未初始化的指针");
  15. String &Pointer::operator*() //*是解引用操作,得到的是指针所指向的对象
  16. {
  17. if (!ptr)
  18. throw errorMessage;
  19. return *ptr;
  20. }
  21. String *Pointer::operator->() const//指针成员操作符
  22. {
  23. if (!ptr)
  24. throw errorMessage;
  25. return ptr;
  26. }
  1. #define _CRT_SECURE_NO_WARNINGS //string.cpp
  2. #include<iostream>
  3. #include<cstring>
  4. #include "string.h"
  5.  
  6. String::String(char const *chars)//接收普通字符串
  7. {
  8. chars = chars ? chars : "";
  9. ptrChars = new char[std::strlen(chars) + ];
  10. std::strcpy(ptrChars,chars);
  11. }
  12. String::String(String const &str) //接收String类的对象
  13. {
  14. ptrChars = new char[std::strlen(str.ptrChars) + ];
  15. std::strcpy(ptrChars,str.ptrChars);
  16. }
  17. String::~String()
  18. {
  19. delete[] ptrChars;
  20. }
  21. void String::display() const
  22. {
  23. std::cout << ptrChars << std::endl;
  24. }
  1. #pragma once
  2. #ifndef POINTER_H //头文件保护,防止多重包含 //pointer.h
  3. #define POINTER_H
  4.  
  5. //pointer类里面用到了String,所以需要前置声明
  6. class String;
  7. //智能指针:对指针使用进行计数
  8.  
  9. class Pointer
  10. {
  11. public:
  12. Pointer();
  13. Pointer(String const &n);
  14. ~Pointer();
  15.  
  16. String &operator*();
  17. String *operator->() const; //智能指针
  18.  
  19. private:
  20. String *ptr;
  21. static String errorMessage;//静态字符串给出错误信息
  22.  
  23. };
  24. #endif // !POINTER_H
  1. #pragma once
  2. #ifndef STRING_H //string.h
  3. #define STRING_H
  4.  
  5. class String
  6. {
  7. public:
  8. String(char const *chars = "");//*chars,不要少写了s, 没有s,char就是关键字了,就会报错
  9. String(String const &str);
  10. ~String();
  11. void display() const;
  12. private:
  13. char *ptrChars;
  14.  
  15. };
  16.  
  17. #endif
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include<iostream> //功能:重载成员操作符。txwtech- //cc21a_demo.cpp
  4. #include "string.h"
  5. #include "pointer.h"
  6. using namespace std;
  7.  
  8. int main() //cc21a_demo.cpp
  9. {
  10. String s("hello String");
  11. s.display();
  12. //cout << "hello" << endl;
  13.  
  14. String *ps = &s;
  15. ps->display();
  16.  
  17. try
  18. {
  19. Pointer p1("c++");
  20. p1->display();
  21.  
  22. Pointer p2;
  23. p2->display();
  24. }
  25. catch(String const &error)
  26. {
  27. error.display();
  28.  
  29. }
  30. system("pause");
  31. return ;
  32. }

cc21a -c++重载成员操作符*,->,代码示范的更多相关文章

  1. cc22a_demo_c++重载自增自减操作符-代码示范

    cc22a_demo_c++重载自增自减操作符-代码示范 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespa ...

  2. c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范

    c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范 #include <iostream> #include < ...

  3. C++ 之 重载赋值操作符

    Widget 类中,定义了一个 Bitmap 类型的私有数据成员 -- pb 指针 class Bitmap { ... }; class Widget { private: Bitmap *pb; ...

  4. C++中复制构造函数与重载赋值操作符总结

    前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...

  5. C++中复制构造函数与重载赋值操作符

    我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成这样的四个函数.例如以下类:   class CTe ...

  6. 5.5 C++重载赋值操作符

    参考:http://www.weixueyuan.net/view/6383.html 总结: 重载赋值操作符同重载类的是拷贝构造函数的原因是一样,将一个对象拷贝给另一个对象,同时当类中存在指针类型的 ...

  7. C++ 重载操作符- 02 重载输入输出操作符

    重载输入输出操作符 本篇博客主要介绍两个操作符重载.一个是 <<(输出操作符).一个是 >> (输入操作符) 现在就使用实例来学习:如何重载输入和输出操作符. #include ...

  8. C++重载赋值操作符

    1.C++中重载赋值操作函数应该返回什么? 类重载赋值操作符一般都是作为成员函数而存在的,那函数应该返回什么类型呢?参考内置类型的赋值操作,例如 int x,y,z; x=y=z=15; 赋值行为相当 ...

  9. 关于AJAX 的交互模型、交互流程及代码示范

    AJAX  = 异步JavaScript + XML. 它是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况 ...

随机推荐

  1. Verilog代码和FPGA硬件的映射关系(四)

    其实在FPGA的开发中理想情况下FPGA之间的数据要通过寄存器输入.输出,这样才能使得延时最小,从而更容易满足建立时间要求.我们在FPGA内部硬件结构中得知,IOB内是有寄存器的,且IOB内的寄存器比 ...

  2. Linux下VCS2014和Verdi2015的联合使用

    VCS和Verdi是IC设计中常用的两款开发工具.VCS是Synopsys公司的产品,和大家所熟知的ModeSim一样的都是EDA仿真工具.Verdi是Nocas公司(已经被Synopsys公司收购) ...

  3. [C#] 使 ToolTip 一直显示 (在 WinForm 与 WPF 中的差异解决方案)

    需求 自己绘制的UI,检测鼠标位置,适时显示出 ToolTip 1 WinForm 的 ToolTip // Member define: private ToolTip _toolTip = new ...

  4. 01 . Mysql简介及部署

    Mysql数据库简介 什么是数据? ​ 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材,数据是信息的表现形式和载体,可以是符号,文字,数字,语音,图 ...

  5. 08 . Nginx状态码

    HTTP状态码 本篇文章主要介绍运维过程中经常遇到的状态码,并通过业界流行的Nginx进行模拟实现. 2XX状态码 2XX类型状态码表示一个HTTP请求成功,最典型的就是200 # 200状态码 # ...

  6. 前端Web浏览器基于H5如何实时播放监控视频画面(前言)之流程介绍

    先看上边这张图.由于离2020年12月各浏览器禁用Flash的日子越来越近,又正恰巧要做新录播项目,所以有了以下内容. 还记得去年也是这个时候,大约是四五六月份,甲方来了个需求想把车间的监控系统接入到 ...

  7. 【译】Welcome to C# 9.0

    C# 9.0正在形成,我想分享我们对添加到该语言下个版本的一些主要功能的看法.对于每个新版本的 C#,我们努力使常见的编码方案更加清晰和简单,C# 9.0 也不例外.这次的一个特别重点是支持数据形状的 ...

  8. Java实现 蓝桥杯VIP 算法提高 P0404

    计算一个无符号整数的阿尔法乘积.对于一个无符号整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身:否则的话,x的阿尔法乘积就等于它的各位非0的数字相乘所得到的那 ...

  9. Java实现 LeetCode 82 删除排序链表中的重复元素 II(二)

    82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4- ...

  10. JVM 由哪些部分组成?

    JVM 由哪些部分组成? 解析:这是对 JVM 体系结构的考察 答:JVM 的结构基本上由 4 部分组成: 类加载器,在 JVM 启动时或者类运行时将需要的 class 加载到 JVM 中 执行引擎, ...