access data member.
delete fptr.get();
}
该测试程序的输出为:
testAccess():
Foo::Foo(0x133a010)
Foo.show(0x133a010): 1
fptr->id: 1
Foo::~Foo(0x133a010)
几种特殊运算符的重载
上面的两个类基本已经覆盖了大部分的运算符重载,下面展示几个“罕见”的运算符重载:
#define TRACE_CALL puts(__FUNCTION__)
class Operand
{
public:
void operator,(const Operand& rhs) const { TRACE_CALL; }
void operator,(int a) const { TRACE_CALL; }
// void operator,(int a, int b) const { TRACE_CALL; } // ERROR: operator, 有且仅有一个参数
void operator->*(int a) const { printf("%s(%d)\n", __FUNCTION__, a); }
};
测试程序:
void testOperand()
{
Operand op1, op2;
op1, op2; // operator,
op1->*123; // operator->*
}
程序输出:
operator,
operator->*(123)
operator new与operator delete
关于operator new和operator delete的重载,下次另外写博客阐释。