C++运算符重载(4) - 不能被重载的操作符

1.不能重载的操作符集合

C++中,下面的操作符是不能被重载的。
.   (成员访问或点操作符)
?: (三元操作符或条件操作符)
::  (域操作符)
.* (指向成员的指针操作符)
sizeof(取对象大小操作符)
typeid(对象类型操作符)

2.操作符.* 介绍

指向成员的指针运算符(.* 和 –>*)返回表达式左侧上指定的对象的特定类成员的值。右侧必须指定该类的成员。

下面的示例演示如何使用这些运算符。

#include <iostream>
using namespace std;

class Testpm {
public:
    void _func1() { cout << "_func1\n"; }
    int _num;
};

// 定义指针pmfn and pmd,分别指向成员函数_func1()以及成员变量_num。
void (Testpm::* pmfn)() = &Testpm::_func1;
int Testpm::* pmd = &Testpm::_num;

int main() {
    Testpm ATestpm;
    Testpm* pTestpm = new Testpm;

    // 访问成员函数
    (ATestpm.*pmfn)();
    (pTestpm->*pmfn)();

    // 访问成员数据
    ATestpm.*pmd = 1;
    pTestpm->*pmd = 2;

    cout << ATestpm.*pmd << endl
        << pTestpm->*pmd << endl;
    delete pTestpm;
}

运行结果:
_func1
_func1
1
2

在前面的示例中,指向成员的指针 pmfn 用于调用成员函数 _func1。 另一个指向成员的指针 pmd 用于访问 _num 成员。
二元运算符 .* 将其第一操作数(必须是类的对象)与其第二操作数(必须是指向成员的指针)组合在一起。
二元运算符 –>* 将其第一操作数(必须是指向类的对象的指针)与其第二操作数(必须是指向成员的指针)组合在一起。
在包含 –>* 运算符的表达方式中,第一操作数必须是第二操作数中指定的类型的“指向类类型的指针”或明确地从该类派生的类型。

注意:虽然.*不能被重载,但是->*却是可以被重载的。

更多参考:
http://en.wikibooks.org/wiki/C++_Programming/Operators/Operator_Overloading

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值