cc21a -c++重载成员操作符*,->,代码示范
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++重载成员操作符*,->,代码示范的更多相关文章
- cc22a_demo_c++重载自增自减操作符-代码示范
cc22a_demo_c++重载自增自减操作符-代码示范 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespa ...
- c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范
c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范 #include <iostream> #include < ...
- C++ 之 重载赋值操作符
Widget 类中,定义了一个 Bitmap 类型的私有数据成员 -- pb 指针 class Bitmap { ... }; class Widget { private: Bitmap *pb; ...
- C++中复制构造函数与重载赋值操作符总结
前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...
- C++中复制构造函数与重载赋值操作符
我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成这样的四个函数.例如以下类: class CTe ...
- 5.5 C++重载赋值操作符
参考:http://www.weixueyuan.net/view/6383.html 总结: 重载赋值操作符同重载类的是拷贝构造函数的原因是一样,将一个对象拷贝给另一个对象,同时当类中存在指针类型的 ...
- C++ 重载操作符- 02 重载输入输出操作符
重载输入输出操作符 本篇博客主要介绍两个操作符重载.一个是 <<(输出操作符).一个是 >> (输入操作符) 现在就使用实例来学习:如何重载输入和输出操作符. #include ...
- C++重载赋值操作符
1.C++中重载赋值操作函数应该返回什么? 类重载赋值操作符一般都是作为成员函数而存在的,那函数应该返回什么类型呢?参考内置类型的赋值操作,例如 int x,y,z; x=y=z=15; 赋值行为相当 ...
- 关于AJAX 的交互模型、交互流程及代码示范
AJAX = 异步JavaScript + XML. 它是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况 ...
随机推荐
- JAVA 基础知识。程序运方法。
dos 常用命令 dir 查看此文件夹目录下的所有程序 cd.. 返回上一层目录 盘符: 直接切换至相应的盘符 cd 目录 切换至指定的目录 cd ...
- C#常见异常
SystemException 其他用户可处理的异常的基本类 ArgumentException 方法的参数是非法的 ArgumentNullException 一个空参数传递给方法,该方法不能接受该 ...
- Jmeter(三) - 从入门到精通 - 测试计划(Test Plan)的元件(详解教程)
1.简介 上一篇中宏哥已经教你如何通过JMeter来创建一个测试计划(Test Plan),那么这一篇我们就将JMeter启动起来,创建一个测试计划(Test plan),然后宏哥给大家介绍一下测试计 ...
- Python Redis常用操作(持续更新)
目录 1.Redis简介 2.Redis部署 3.Redis API应用 4.String操作 1.Redis简介 redis是业界主流的key-value,nosql数据库之一.和Memcached ...
- [JavaWeb基础] 020.Velocity 模板引擎简单示例
1.什么是Velocity 一种J2EE的前端模版技术,和JSP,Freemarker差不多,都是用来展示网页内容的.和JSP不同的是velocity只能显示Action中的数据,不能处理数据.不能写 ...
- [Objective-C] 003_内存管理
Objective-C内存管理,基本原理. 1.为什么要进行内存管理? 由于移动设备的内存极其有限,所以分配每个APP使用的内存也是有限制的,app运行时内存占用较多的话,系统就会发出内存警告,严重时 ...
- 01 . Keepalived原理使用和配置
Keepalived简介 是什么? keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测we ...
- SpringBoot实现微信小程序登录的完整例子
目录 一.登录流程 二.后端实现 1.SpringBoot项目结构树 2.实现auth.code2Session 接口的封装 3.建立用户信息表及用户增删改查的管理 4.实现登录认证及令牌生成 三.前 ...
- Rocket - tilelink - ProbePicker
简单介绍ProbePicker的实现. 1. 基本介绍 用于把多个Cache client合并成一个: 2. diplomacy node ProbePicker的 ...
- Java 第十一届 蓝桥杯 省模拟赛十六进制转换成十进制
问题描述 请问十六进制数1949对应的十进制数是多少?请特别注意给定的是十六进制,求的是十进制. 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这 ...