C++的“友元類”的一個使用場景
阿新 • • 發佈:2019-01-04
我遇到了“必須使用友元類”的一個場景。
我遇到了A中有B,B中有A的場景。
貌似“A的一個函式,作為B的友元函式”這個需求無法被實現。
完。#include <stdlib.h> class MyApiCls; class TcpClientCls//用於和Server通訊 { public: TcpClientCls(MyApiCls* pApi) :m_pApi(pApi){} public: void Start(){ HandleUpdateTradingDay("20160308", 9); }//模擬了與Server連線後的情況。 private: void HandleUpdateTradingDay(void* pkg, unsigned int len); private: MyApiCls* m_pApi; }; //inline void TcpClientCls::HandleUpdateTradingDay(void* pkg, unsigned int len) //{ //放在這裡會報錯。 // if (m_pApi) // m_pApi->m_tradingDay = atoi(reinterpret_cast<char*>(pkg)); //} class MyApiCls { friend TcpClientCls;//這個友元函式是必須的。 public: MyApiCls() :m_tradingDay(0), m_client(this){} public: void Start(){ m_client.Start(); } private: int m_tradingDay; TcpClientCls m_client; }; inline void TcpClientCls::HandleUpdateTradingDay(void* pkg, unsigned int len) { if (m_pApi) m_pApi->m_tradingDay = atoi(reinterpret_cast<char*>(pkg)); /*如果TcpClientCls引用了MyApiCls,而MyApiCls也引用了TcpClientCls, 那麼,請將它們的"類的宣告"和"成員函式的實現"分成".h"和".cpp"檔案。 如果都想寫進.h檔案中,那麼請注意某些(比如這個)函式的實現的位置。 */ } int main() { MyApiCls api; api.Start(); return 0; }