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