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

*,解引用操作符

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

 #include "pointer.h" //pointer.cpp
#include "string.h" Pointer::Pointer() :ptr() {} Pointer::Pointer(String const &n)
{
ptr = new String(n); //ptr指针指向String
}
Pointer::~Pointer()
{
delete ptr;
}
String Pointer::errorMessage("未初始化的指针");
String &Pointer::operator*() //*是解引用操作,得到的是指针所指向的对象
{
if (!ptr)
throw errorMessage;
return *ptr;
}
String *Pointer::operator->() const//指针成员操作符
{
if (!ptr)
throw errorMessage;
return ptr;
}
#define _CRT_SECURE_NO_WARNINGS //string.cpp
#include<iostream>
#include<cstring>
#include "string.h" String::String(char const *chars)//接收普通字符串
{
chars = chars ? chars : "";
ptrChars = new char[std::strlen(chars) + ];
std::strcpy(ptrChars,chars);
}
String::String(String const &str) //接收String类的对象
{
ptrChars = new char[std::strlen(str.ptrChars) + ];
std::strcpy(ptrChars,str.ptrChars);
}
String::~String()
{
delete[] ptrChars;
}
void String::display() const
{
std::cout << ptrChars << std::endl;
}
#pragma once
#ifndef POINTER_H //头文件保护,防止多重包含 //pointer.h
#define POINTER_H //pointer类里面用到了String,所以需要前置声明
class String;
//智能指针:对指针使用进行计数 class Pointer
{
public:
Pointer();
Pointer(String const &n);
~Pointer(); String &operator*();
String *operator->() const; //智能指针 private:
String *ptr;
static String errorMessage;//静态字符串给出错误信息 };
#endif // !POINTER_H
#pragma once
#ifndef STRING_H //string.h
#define STRING_H class String
{
public:
String(char const *chars = "");//*chars,不要少写了s, 没有s,char就是关键字了,就会报错
String(String const &str);
~String();
void display() const;
private:
char *ptrChars; }; #endif
#define _CRT_SECURE_NO_WARNINGS

#include<iostream>    //功能:重载成员操作符。txwtech- //cc21a_demo.cpp
#include "string.h"
#include "pointer.h"
using namespace std; int main() //cc21a_demo.cpp
{
String s("hello String");
s.display();
//cout << "hello" << endl; String *ps = &s;
ps->display(); try
{
Pointer p1("c++");
p1->display(); Pointer p2;
p2->display();
}
catch(String const &error)
{
error.display(); }
system("pause");
return ;
}

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. Lambda表达式用法大比较: Scala和Java 8

    最近几年Lambda表达式风靡于编程界. 很多现代编程语言都把它作为函数式编程的基本组成部分. 基于JVM的编程语言如Scala,Groovy还有Clojure把它们作为关键部分集成在语言中.现在Ja ...

  2. [Objective-C] 014_Objective-C 代码规范指南

    本文参考引用(http://www.csdn.net/article/2015-06-01/2824818-objective-c-style-guide/1) 拥有良好的编码规范,能使我们的代码保持 ...

  3. Unity 离线建造系统

    很多游戏,特别是养成类手游,都会有自己独特的建造系统,一个建造装置的状态循环或者说生命周期一般是这样的: 1.准备建造,设置各项资源的投入等 2.等待一段倒计时,正在建造中 3.建造结束,选择是否收取 ...

  4. group by和having注意事项

    执行和编写顺序:join->where->group by->having 其中where与having的区别: where用于在group by分组之前过滤掉某些行, group ...

  5. 深入浅出Spring MVC

    摘要 本文旨在详细分析SpringMVC工作原理以及作为开发者如何基于SpringMVC做扩展.因为SpringMVC分析的文章比较多,所以本文重点讲解如何利用SpringMVC的扩展点实现我们的需求 ...

  6. 2019-ICCV-PDARTS-Progressive Differentiable Architecture Search Bridging the Depth Gap Between Search and Evaluation-论文阅读

    P-DARTS 2019-ICCV-Progressive Differentiable Architecture Search Bridging the Depth Gap Between Sear ...

  7. 远程vps管理工具巧利用,如何短时间内提高vps管理效率!

    假设你手上有1000台vps,那有没有一个免费的工具来进行有效的管理呢? 答案是有的,这里推荐一个非常好用的工具:IIS7远程桌面,免费版支持5台服务器登录,vps登录情况一目了然,高级版支持不限量台 ...

  8. 【HIVE高级笔试必备题型】(组内topN、相邻行的值比较问题)求语文大于数学_/_求文科大于理科成绩的学生

    Hive SQL练习之成绩分析 数据:[id, 学号,班级,科目,成绩] 1,1,1,yuwen,80 2,1,1,shuxue,85 3,2,1,yuwen,75 4,2,1,shuxue,70 5 ...

  9. Java实现 LeetCode 781 森林中的兔子(分析题)

    781. 森林中的兔子 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返回森林中兔子的最少数量. 示例: ...

  10. Java实现字符串转换成整数

    1 问题描述 输入一个由数字组成的字符串,请把它转换成整数并输出.例如,输入字符串"123",输出整数123. 请写出一个函数实现该功能,不能使用库函数. 2 解决方案 解答本问题 ...