因为系统已经定义了两个指针的运算,所以你不能改变它
比如两个同类型的指针相加,就是指针的指相加,你是不能改变这个行为的
比如两个同类型的指针相加,就是指针的指相加,你是不能改变这个行为的
#include
<
iostream
>
using
namespace
std;
class
Test{
int
val;
public
:
Test(
int
v):val(v){}
Test
&
operator
*=
(
const
Test
*
src)
{
//
成员函数,有隐含的对象引用,不算单独操作指针
val
*=
src
->
val;
return
*
this
; }
friend Test
operator
*
(
const
Test
&
src1,
const
Test
*
src2)
{
//
一个引用,一个指针,OK
Test ret;
ret.val
=
src1.val
*
src2
->
val;
return
ret;
}
#if
0
//
Error: must have an argument of class or enumerated type
friend Test
operator
*
(
const
Test
*
src1,
const
Test
*
src2)
{
//
友元,都是指针,尝试单独操作...
Test ret; ret.val
=
src1
->
val
*
src2
->
val;
return
ret;
}
#endif
void
print()
{ cout
<<
val
<<
endl;
}
};
int
main()
{ Test test1(
2
), test2(
3
), test3;
test1.print();
test2.print();
test1
*=
&
test2;
test1.print();
test3
=
test1
*
&
test2;
test3.print();
//
test3 = &test1 * &test2;
return
0
;
}