#include <iostream.h>
class A
{
int n1;
double n2;
public:
A() { n1=0; n2=0;}
A(int a, int b) { n1=a; n2=b;}
operator const int*() const //int*转换操作符
{
return &n1;
}
operator int*()
{
return &n1;
}
operator const double*() const
{
return &n2;
}
operator double*()
{
return &n2;
}
operator int() const
{
return n1;
}
A* operator&() //重载&
{
cout << "重载的&";
return this;
}
void show() const
{
cout<<n1 <<" "<<n2 <<endl;
}
};
void main()
{
A a;
a.show();
int* p1 = a;
*p1 = 9;
double * p2 = a;
*p2 = 1.1;
a.show();
int i = a;
cout << i << endl;
A* p3 = &a;
cout << p3 << endl;
}
运行结果:
0 0
9 1.1
9
重载的&0x0012FF70
这个例子表明,通过转换操作符可以获得对象私有成员的地址,利用这些地址可以改变对象的私有数据成员
注:要注意int*转换符方法与重载*的区别