2017-03-07 13 views
-2

私は今までC++を勉強してきましたが(C言語の学習に多くの時間を費やしましたが)、私の質問は経験豊富なプログラマーには聞こえるかもしれませんが、まだ答えは見つかりませんでした:この関数呼び出しをどのように理解する必要がありますか?

私はsample projectで働いています。これは、クライアントソケットベースのチャットアプリケーションを実装して、Windowsソケットプログラミングを詳しく解説しています。のない別の宣言がありません

virtual BOOL Accept(
    CAsyncSocket& rConnectedSocket, 
    SOCKADDR* lpSockAddr = NULL, 
    int* lpSockAddrLen = NULL); 

m_Server.Accept(m_Server.m_Client) 

受け入れ()関数はCAsyncSocketクラスのクラスで宣言されています

接続要求のためのサーバを待機させるために使用される関数の呼び出しがありますコード内にこの宣言を上書きするAccept()関数があるため、2番目と3番目のパラメータは定義済みのデフォルトパラメータであるため、NULLと見なされます。 (だから私はそれが機能は、この文脈で仮想として宣言されていることではない関連だと思います。)

オブジェクトm_Serverとm_Clientは(MFC CAsyncSocketクラスから派生しているのCSocketから派生したクラスServerSocketを、両方のタイプです標準クラス)。

今、私の質問に来る:これらのオブジェクトの両方は別々に作成され、それらの間に階層関係はありません。だから私はどのように関数呼び出しを理解する必要があります受け入れる(m_Server.m_Client)?この点演算子の使い方の正確な用語式は何ですか/ここでは正確には何ですか/ m_Server.m_Clientの具体的なパラメータは何ですか?

The code can be downloaded from codeproject.com:私はこれについての説明を本当に感謝しm_serverはChatServerDlg.hで定義され、m_ClientはServerSocket.h

で定義されています。前もって感謝します。

+2

特に、あなたがそのコードから何を理解できなかったかを教えていただければ、答えが分かりやすくなるかもしれません。 –

+2

_ "この場合のm_Server.m_Clientの具体的なパラメータは何ですか?" _メンバ変数m_Clientは、m_Serverインスタンスから取得します。 –

+0

@πάνταῥεῖ私は、彼は、m_Serverとm_Clientは同じタイプのServerSocketの別々のオブジェクトとして作成されていると思います。私が疑問に思っていることは、「引数m_Server **。** m_Clientを使ってAccept関数をどのように呼び出すことが可能か」です。このドットはメンバを示しますが、この場合、m_Clientはメンバではなく別のオブジェクトです。 c128linux、これはあなたが求めていることですか? –

答えて

1

私はあなたの質問に対する答えがあると思います。

あなたがm_Clientを作成したオブジェクトとまったく同じ名前(CServerSocket :: m_Client)を使用するクラスCServerSocket内部のメンバ変数間の命名の混乱があるようです。

私があなたが言及したプロジェクトをダウンロードしました。これはクラスCServerSocketの定義です。

したがって、CServerSocketタイプのオブジェクトを作成する場所があれば、メンバーm_Clientにアクセスできます。例:

CServerSocket m_Server; 
m_Server.m_Client.Send(...args...); 

これは問題ありません。しかし、あなたの混乱は、m_Clientと呼ばれるCServerSocketタイプの別のオブジェクトを作成したという事実から生じました!

CServerSocket m_Client; 
m_Client.m_Client.Send(...args...); 

これはまだ問題ありません。奇妙な命名規則ですが、合法です。 したがって、引数m_Serverです。関数呼び出しからm_Clientを受け入れ、そのご/または作成したオリジナルのコードの作者m_Clientメンバーm_Serverm_Clientではなく、オブジェクトを使用しています。

これはこれをクリアすることを希望し、探している場所の答えです。

+0

はい、これはまさに私が探していた答えでした。ありがとうございました!私が実際に尋ねたかったことを理解するのが少し難しかったのなら、ごめんなさい。あなたが言ったように、私の混乱の主な理由は、このサンプルプロジェクトで使用された命名でした。 – c128linux

関連する問題