C++解引用运算符*重载

原创 2015年11月22日 00:54:24

“*”是一个一元操作符,它作用于指针,获取指针所指单元的内容。当某个类中对*操作符重载时,是将该类对象当做一个指针看待,而用*操作符提取指针所指向的内容。考察如下程序。

#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申请空间,则应该在对象的析构函数中释放空间。反之,将指针所指空间的申请和释放的工作放到外部去处理。

版权声明:感谢您对博文的关注!2017年秋季校招已经开始,有需要内推腾讯的可以QQ(1589276509)联系我哈,期待你的加入。

引用、取址运算符、解引用运算符——傻傻分不清楚

引用 对象的别名。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。 C++11中新增了:右值引用(rvalue reference),这种引用主要用于内置类。严格来说, 平时提及的“...
  • Noob_f
  • Noob_f
  • 2015年10月04日 15:14
  • 4482

C++ 解引用(*)和箭头(->)运算符的重载

1、箭头运算符必须是类的成员函数。解引用运算符一般也应该声明为类的成员函数,但不是必须。2、箭头用算符返回值必须是一个指针,或者是一个重载了箭头运算符的对象。         a)如果返回的是一个指针...
  • francisapp
  • francisapp
  • 2017年02月27日 11:44
  • 749

关于引用及取地址&运算符的用法

在习惯了C语言的程序员眼里 , & 这个符号的意思就是取地址和对位进行与运算 , 但在C++中 , & 被重载多了一种意思 , 就是引用。...
  • wonghifong0223
  • wonghifong0223
  • 2015年09月17日 14:10
  • 2131

C++之引用&重载

c++的引用和函数重载笔记以及代码示例
  • Jackiellx
  • Jackiellx
  • 2016年10月15日 01:21
  • 1082

c++引用与指针的区别(着重理解)

★ 相同点:     1. 都是地址的概念;     指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。     ★ 区别:     1. 指针是一个实体,而引用仅是个别名; ...
  • THISISPAN
  • THISISPAN
  • 2012年04月13日 00:54
  • 72731

C++中的解引用与智能指针

一、概述在C语言和C++中,不管我们用C语言的库函数malloc开辟了一块内存,还是用C++的操作符new出了一块内存,我们都要同过free和delete去释放内存。而对于其他高级语言来说,当我们开辟...
  • jiang_xinxing
  • jiang_xinxing
  • 2017年03月08日 17:22
  • 360

C++多级指针的”解引用“

指针是C语言中公认的最为强大的语法要素,但同时也是最难理解的语法要素,它曾给程序员带来了无数麻烦和痛苦,以致于在C语言之后诞生的很多新兴 语言中我们再也难觅指针的身影了。 下面是一个最简单的C语言指针...
  • langb2014
  • langb2014
  • 2015年10月23日 12:49
  • 474

C++ 重载操作符之一(指针运算符*,->)

//重载指针运算符*,-> #include using namespace std; template class MyPtr { private: T * m_ptr; public: ...
  • u014338577
  • u014338577
  • 2015年09月06日 23:24
  • 2352

STL(1)---从对->运算符的重载到灵巧指针再到迭代器

首先->也就是指针间接引用运算符一定是 一个成员函数,必须返回值是一个对象或者对象的引用,或者必须返回一个指针,被用于选择指针间接引用运算符箭头所指的内容 所谓灵巧指针就是一个对象表现的像一个指针,这...
  • kai8wei
  • kai8wei
  • 2015年07月29日 16:27
  • 1208

重载指针运算符

#include #include using namespace std; //指针间接引用运算符一定是一个成员函数。它有着额外的,非典型的限制:它必须返回一个对象(或引用),该对象也有一个指针...
  • h1023417614
  • h1023417614
  • 2013年11月03日 19:12
  • 3245
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++解引用运算符*重载
举报原因:
原因补充:

(最多只允许输入30个字)