先看例子:
class string
{
private:
char* m_buffer;
public:
string& operator=(char* string);
string& operator=(string& string);
};
string& string::operator=(char* string)
{
  if(string==NULL)
  {delete m_buffer;
   m_buffer=NULL;
   return *this;
}
string& string::operator=(string& string)
{
return operator=((char*)string);
}
问:在运算符重载中第2个函数中传递的十一个类的实体地址,请问用(char*)这样的类型转换就能得到类中相应的数据成员的值吗?如果在该类中还有一个整型的数据成员我用(int *)也能得到其值吗?请祥解一下,谢谢!

解决方案 »

  1.   

    好像不行,参考一下CString地实现方法。
    你的第一个赋值方式不对,需要自己分配空间,复制数据;第二个将string转成了char*的数据,实际还是调用了第一个赋值操作符。从结构空间的分配来说,没有问题,但是这样做是不安全的,虽然m_buffer指向的就是结构的地址。而且这要看你第一个赋值操作符的实现方法。如果你还要复制一int*的数据空间,更要自己分配空间了