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 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况 ...
随机推荐
- HashMap集合嵌套集合方法四种
Map<String, HashMap<Person, String>> m=new HashMap<String, HashMap<Person, String& ...
- mybatis的多表联查
多对一连表查询简单记录
- vue滑动位移动画
需要用到css3,vue过度 在网上找了很久很少的资料,自己摸索了一会看了官方文档,毕竟环境不同,需要的效果不同,耽误了很久 鼠标放上某一个就会从下方弹出层
- LTE常用标识和参数
1 基本标识 1 .1 IMSI 1.2 IMEI 1.3 MSISDN 1.4 TMSI 1.5 MSRN 2 区域类标识 2.1 GCI 其中 LA是GSM(2g)中的位置区,对应4G中的跟踪区T ...
- httpclient介绍与请求方式详解
httpClient工具介绍 HTTP协议可能是现在lntemet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源.虽然在JDK的java.net包中已经 ...
- [批处理教程之Git]001.Git 常用命令大全
基本技巧 1.安装后的第一步 安装git后,第一件事你需要设置你的名字和邮箱,因为每次提交都需要这些信息. $ git config --global user.name "Some One ...
- Mysql基础(四)
##约束 /* 含义:一种限制,用于限制表中的数据, 为了保证表中的数据的准确性和可靠性 分类:六大约束 not null: 非空,用于保证该字段的不能为空,比如姓名,学号等 default: 默认, ...
- 以太坊智能合约开发框架Truffle
前言 部署智能合约有多种方式,命令行的浏览器的渠道都有,但往往跟我们程序员的风格不太相符,因为我们习惯了在IDE里写了代码然后打包运行看效果. 虽然现在IDE中已经存在了Solidity插件,可以编写 ...
- jchdl - GSL Node
https://mp.weixin.qq.com/s/Oa4qgjIUccu5Y-Jlqcyn_A org.jchdl.model.gsl.core.meta.Node.java gen ...
- SpringBoot 及其 基本原理(一)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 前言: 分布式架构及微服务理念 1.SOA理念(思想) SOA :即 Service Oriented ...