class CSockAddr : public sockaddr_in {
public:
// constructors
CSockAddr()
{ sin_family = AF_INET;
  sin_port = 0;
  sin_addr.s_addr = 0; } // Default
CSockAddr(const SOCKADDR& sa) { memcpy(this, &sa, sizeof(SOCKADDR)); }
CSockAddr(const SOCKADDR_IN& sin) { memcpy(this, &sin, sizeof(SOCKADDR_IN)); }
CSockAddr(const ULONG ulAddr, const USHORT ushPort = 0) // parms are host byte ordered
{ sin_family = AF_INET;
  sin_port = htons(ushPort);
      sin_addr.s_addr = htonl(ulAddr); }
CSockAddr(const char* pchIP, const USHORT ushPort = 0) // dotted IP addr string
{ sin_family = AF_INET;
  sin_port = htons(ushPort);
  sin_addr.s_addr = inet_addr(pchIP); } // already network byte ordered
// Return the address in dotted-decimal format
CString DottedDecimal()
{ return inet_ntoa(sin_addr); } // constructs a new CString object
// Get port and address (even though they're public)
USHORT Port() const
{ return ntohs(sin_port); }
ULONG IPAddr() const
{ return ntohl(sin_addr.s_addr); }
// operators added for efficiency
         //下面这两个operator在这个类里是干什么的?
const CSockAddr& operator=(const SOCKADDR& sa)
{ memcpy(this, &sa, sizeof(SOCKADDR));
  return *this; }
const CSockAddr& operator=(const SOCKADDR_IN& sin)
{ memcpy(this, &sin, sizeof(SOCKADDR_IN));
  return *this; }
         //下面这三个operator在这个类里是干什么的?
operator SOCKADDR()
{ return *((LPSOCKADDR) this); }
operator LPSOCKADDR()
{ return (LPSOCKADDR) this; }
operator LPSOCKADDR_IN()
{ return (LPSOCKADDR_IN) this; }
};

解决方案 »

  1.   

    const CSockAddr& operator=(const SOCKADDR& sa)
    { memcpy(this, &sa, sizeof(SOCKADDR));
      return *this; }
    const CSockAddr& operator=(const SOCKADDR_IN& sin)
    { memcpy(this, &sin, sizeof(SOCKADDR_IN));
      return *this; }
    赋值操作符operator SOCKADDR()
    { return *((LPSOCKADDR) this); }
    operator LPSOCKADDR()
    { return (LPSOCKADDR) this; }
    operator LPSOCKADDR_IN()
    { return (LPSOCKADDR_IN) this; }
    用于隐式转换
      

  2.   

    DentistryDoctor 能不能说具体一点不是很明白
      

  3.   

    operator是运算符重载的关键字
    比如 operator=是重载赋值运算符
    即定义赋值操作而operator SOCKADDR()等则是定义类型转换可以看下有关C++运算符重载的东西都有讲这些
      

  4.   

    如上,operator是运算符重载关键字,可以用来,定义自己符合使用习惯的运算符