1. 程式人生 > >C++的類成員函式的思考,static,類成員函式指標。

C++的類成員函式的思考,static,類成員函式指標。

1.如果採取例項化,然後,在呼叫這個成員函式的時候總是帶上例項的名字呼叫,我覺得這很不科學,否則每次改變例項的名字,呼叫函式的時候也要跟著改變。

2.

class a

{

public:

    void ss();

}

void tt()

{

    ss(); 

}

void ss()

{

    while(1);

}

int main()

{

    tt(); //不會出錯,但是呼叫的ss並不是類成員函式ss。要注意是否是類成員函式。一個函式的定義帶不帶::差別是很大的。

}

3.要達到的目的是,封裝到一個類裡面的同時,做到不依賴某個固定的例項。或者做到儘量少依賴,定義一個例項,

只使用一次例項的名字。

4.void Websocket::on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) {
   /* std::cout << "on_message called with hdl: " << hdl.lock().get()
              << " and message: " << msg->get_payload()
              << std::endl;*/


//::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,-1); 

readStrJson(msg->get_payload()); 

1>d:\llz\kl_wlserver\kl_wlserver\websocket.cpp(43) : error C2352: 'Websocket::readStrJson' : illegal call of non-static member function

可以看出,在一個成員函式的定義內容裡面,所有不指名域的函式也都會被冠以該類的域。

因為on_message是static型的,所以readStrJson也應該是static型的。

5.最後問自己一遍,為什麼要加static。

首先,如果我使用了回撥函式,傳給回撥函式的引數是類成員函式,可以採取兩種做法:第一就是例項化了之後,傳入該例項對應的成員函式的地址,(比如,Websocket.aa),第二就是,直接&Websocket::aa,但是,aa在宣告的時候要加static。

為了減少對例項的依賴,我採取了第二種做法。