我应该如何理解这个函数调用?
我一直在学习C++只是一段时间到现在(虽然我花了很多时间学习C年前),所以我的问题可能听起来简单,有经验的程序员,但我无法找到答案了吗。 :我应该如何理解这个函数调用?
我的工作我自己通过sample project,它实现了一个基于客户端 - 服务器聊天应用程序exaplain的Windows套接字编程。
有用于制造连接请求的服务器等待一个函数调用:
m_Server.Accept(m_Server.m_Client)
的接受()函数中的CAsyncSocket类中声明:
virtual BOOL Accept(
CAsyncSocket& rConnectedSocket,
SOCKADDR* lpSockAddr = NULL,
int* lpSockAddrLen = NULL);
有没有单独的声明代码中的Accept()函数将覆盖此声明,因此第二个和第三个参数将被假定为NULL,因为这些是已定义的默认参数。 (所以我认为这是不相关的函数声明为在此背景下虚拟)
的对象m_Server和m_Client是两种类型的ServerSocket类,从CSocket类派生,它是从CAsyncSocket类派生的(MFC标准类)。现在
,来到我的问题:这两个对象单独创建并有它们之间没有层次关系。那么我该如何理解函数调用Accept(m_Server.m_Client)?什么是这种用法点操作的正确的术语表达/这是什么做的正是在这里/什么是在这种情况下产生的m_Server.m_Client具体的参数?
The code can be downloaded from codeproject.com:m_server在ChatServerDlg.h定义和m_Client在ServerSocket.h
定义我会很感激这个解释。提前致谢。
我觉得我有回答你的问题。
似乎有物体之间和类CServerSocket它使用完全相同的名称(CServerSocket :: m_Client)内的成员变量的命名混乱已创建m_Client。
我下载你所提到的项目,这是类CServerSocket的定义。
class CServerSocket : public CSocket
{
// Attributes
public:
// Operations
public:
CServerSocket();
virtual ~CServerSocket();
// Overrides
public:
CDialog * pDlg;
CClientSocket m_Client; // <- CONFUSION!!!
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CServerSocket)
public:
virtual void OnAccept(int nErrorCode);
//}}AFX_VIRTUAL
// Generated message map functions
//{{AFX_MSG(CServerSocket)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
// Implementation
protected:
};
所以,如果我们要在其中创建类型CServerSocket的对象,那么我们将有机会获得它的成员m_Client。例如:
CServerSocket m_Server;
m_Server.m_Client.Send(...args...);
这很好!然而,你的困惑源自于你创建了另一个CServerSocket类型的对象,叫做m_Client!
CServerSocket m_Client;
m_Client.m_Client.Send(...args...);
这还行!奇怪的命名约定,但合法。 所以参数m_Server。m_Client从函数调用接受,使用成员m_Server的m_Client而不是对象m_Client你/或创建的原始代码的作者。
希望这可以清除它,它是你在哪里寻找的答案。
是的,这正是我正在寻找的答案,非常感谢!抱歉,如果我很难理解我真正想问什么。正如你所说,这个样本项目使用的命名是导致我混淆的主要原因。 – c128linux
如果您想告诉我们您从代码中不能理解的内容,可能会更容易回答。 –
_“在这种情况下m_Server.m_Client产生的具体参数是什么?”_ m_Server实例中的成员变量m_Client。 –
@πάνταῥεῖ我认为他说m_Server和m_Client是单独创建的同一类型ServerSocket的对象。从我所理解的问题来看,“如何用一个参数m_Server **。m_Client?调用函数Accept?”。点表示一个成员,但在这种情况下,m_Client不是成员,而是一个单独的对象。 c128linux,这是你在问什么? –