C++ 解引用操作符重载
*
是一个一元操作符,作用于指针,获取指针所指单元的内容。当某个类中对*
操作符重载时,是将该类对象当做一个指针看待,用*
操作符提取指针所指向的内容。
#include <iostream>
using namespace std;template<typename T> class DataContainer {T *p;
public:DataContainer(T* pp) {p=pp;}~DataContainer() {delete p;}template<typename T> friend T operator*(const DataContainer<T>&);
};template<typename T> T operator*(const DataContainer<T>& d) {return *(d.p);
};int main() {DataContainer<int> intData(new int(5));DataContainer<double> doubleData(new double(7.8));cout << *intData << endl;cout << *doubleData << endl;return 0;
}
程序输出结果:
5
7.8
阅读以上程序需要注意以下几个要点:
(1)*
操作符重载既可以采用友元函数的形式,也可以是成员函数形式。如果是后者,应在类体中这样定义*
操作符号函数。
T operator*() {return *p;
}
如此定义,更加简洁。一般情况下,重载*操作符都是以成员函数的方式进行。
(2)一般来说,对*
操作符进行重载的类都含有一个指针,*
操作符通过类对象取数据,实际上就是从该指针所指的单元取数据。
(3)为了防止内存泄露,应该妥善处理 new 和 delete 运算。如果在对象的构造函数中使用了 new 申请空间,则应该在对象的析构函数中释放空间。反之,将指针所指空间的申请和释放的工作放到外部去处理。
C++ 解引用操作符重载相关推荐
- Kotlin 操作符重载详解
本文主要内容 算术操作符重载 二元操作符重载 复合赋值操作符重载 一元操作符重载 比较操作符重载 集合相关的操作符重载 索引操作符重载 索引操作符重载Kotlin集合中的应用 in 操作符重载 区间操 ...
- C++:重载操作符 赋值操作符重载需要注意的问题
一.操作符重载 1.什么是操作符重载 就是把一些操作符通过关键字operator,组装成一个函数,关键字operator后面接需要重载的操作符符号 2.为什么需要重载操作符? (1)简单.方便,比起封 ...
- 指针(*)、取地址()、解引用(*)与引用()
指针(*).取地址(&).解引用(*)与引用(&) C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *. 指针是一个包含了另一个变量地址的变量,您可 ...
- C语言(宏,内存,地址,指针,解引用)
#include <stdio.h> #define NUM 100 int Add(int x,int y) { int z = x + y; return z; } 宏 ...
- 一、初级篇——指针(*)、取地址()、解引用(*)与引用()的区别
1. 初步了解--指针与取地址 先看程序: #include<stdio.h>int main(void) {int num = 7;int *p = #//初始化指针,也可以写作int* ...
- c语言解引用运算符,C++ 解引用(*)和箭头(-)运算符的重载
重载要求: 1.箭头运算符必须是类的成员函数.解引用运算符一般也应该声明为类的成员函数,但不是必须. 2.箭头用算符返回值必须是一个指针,或者是一个重载了箭头运算符的对象. a)如果返回的是一个指针将 ...
- 《C++详解》(二)初入C++最重要的知识点:引用 操作符
目录 零,前言 一,引用的概念 二,引用的作用 1,引用做返回值 2,引用做参数 三,const常引用 四,引用的原理 五,引用与指针的区别 零,前言 在大学课程C++或者数据结构课本上很多同学发现 ...
- c++ operator百样操作符重载(详解)
目录 一.operator== :等号判断重载 二.operator = : 等号赋值重载 三.operator != : 不等于重载 四.operator> : 大于号 或者 小于号 重载 五 ...
- C++函数指针解引用
声明函数的引用: int f( double ); int (* const pf)(double) = f; // pf是指向函数f()的常量指针 int (&rf)(doubl ...
最新文章
- redhat linux新建用户,linux redhat 添加用户
- 京东面试题:二叉树直径
- “AlphaGo之父”获最新一届ACM计算奖
- 【hdu1241Oil Deposits】【HDU 2612 Find a way】
- 机器学习笔记:Adam
- java finereport_java报表FineReport_JS整理
- macOS 跳过非 AppStore 下载的软件打开时的验证步骤
- Makefile 的 遗漏分隔符错误信息
- 一个软件工程师的职业规划
- Linux学习总结(66)——CentOS7操作系统SSH安全加固
- 超轻粘土机器人_超轻粘土 | 天近秋,背上行囊,捎上橡果,我们出发去远方
- 几何公差基础知识之圆度
- wox无法启动解决办法:
- html5 窗口 最小化,HTML5 窗口最小化动画(先压扁后变窄)
- Chamfer Distance--倒角距离
- 如何解决个人信息泄露问题
- react中关于解决antd里日历组件内部英文转换的问题
- 【转】走火大神说:去年这时候又辞退了一个老油条,不知道他现在是否在开公司了,可以对比一下混工资的水平...
- postgresql 备份 还原
- win10右键选中或双击docx、xlsx、ppt文件出现未响应情况
热门文章
- 这个严重漏洞可被滥用于破坏交通信号灯系统
- 《数学计算出题系统》功能规格说明书
- 免密登录-python
- 容器的主要目的是什么,Wise2C睿云智合的实战
- vs code 前端如何以服务器模式打开 [安装服务器] server insteall
- 设计模式系列 12-- 职责链模式
- GCD之后台程序运行
- java实现的判断括号是否成对的代码,()[]{}都可以
- java中sam接口_具有非SAM接口的lambda的Java习惯用法
- [Java] 蓝桥杯ALGO-111 算法训练 明明的随机数