猿问
下载APP

关于C++API知识的一些提问。


http://img3.mukewang.com/5bd6fe7b000156f706580493.jpghttp://img.mukewang.com/5bd6fe89000104d906580493.jpg
第二幅图里有一句话:客户仍然可以通过该方法返回整型套接字句柄修改类的状态。
这里有几个问题看不懂(#-.-)
第一:结合书上的SocketDisconnect方法不是返回bool型吗?怎么变成返回整型套接字句柄了?
第二:什么是修改类的状态,没听说过啊,各位大仙可以解释下么?而且返回整型套接字句柄怎么修改类的状态啊?
对了还有这样一句话:如果返回指向某个私有成员变量的no-const指针或引用,那也会发生同样内部状态泄露。
也请各位大仙解释一下这句话的意思。
拜托了,真的想不明白,网上也找不到相似的资料。

生生不息的他
浏览 485回答 3
3回答

onemoo

你提到的那句话在第一幅图里吧。对于你的第一问:结合上下文,这句话中的“该方法”指的应该是 GetSocket() 吧。对于你的第二问:所谓“类的状态”指的就是对象本身具有的那些属性,比如类实例自己的成员变量之类的。“整型套接字句柄怎么修改类的状态啊?”  显然有其他的方式——比如某些更底层的函数——可以通过套接字句柄来改变套接字的状态。GetSocket 函数被修饰为 const,这表示设计者并不希望调用这个函数会导致类实例的成员变量(或者说自身的状态)被修改。可是它返回了句柄,可能有其他函数可以通过这一句柄来修改套接字,这就违背了设计者的初衷,所以说这样的设计是糟糕的。这其实就是最基本的封装细节的面向对象思想。如果你不明白(或者看不懂上面的解释),我觉得你不如再把这些最最基础的面向对象概念好好复习下......    你提的这个问题表现出你还没有完全理解面向对象的思想,可能也没有学明白 C++。

生生不息的他

图片的顺序放错了,所以问题是:第一幅图里有一句话:客户仍然可以通过该方法返回整型套接字句柄修改类的状态……

生生不息的他

因为第二幅图看不清楚,我手打程序吧。 #include<string> #include<cstdef> #include<sys/socket.h> #include<unistd.h> Class URLDownloader { public: URLDownloader(); bool DownloadFile(const std::string&url,                                 const std::strong&localFile); bool SocketConnect(const std::string&host,int port); void ScoketDisconnect(); bool IsScoketConnected()const; int GetScoket()const; bool SocketWriter(const char*buffer,size_t bytes); size_t SocketRead(char* buffer,size_t bytes); bool WriteBufferToFile(char*buffer,const std::string &filename); private: int mSocketID; struct sockaddr_in mServAddr; bool mIsConnected; }
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答