C++的一些語法(調用父類的同名函數)

C++的一些語法(調用父類的同名函數)

     前段時間,在改程序的時候,突然卡在了C++的一個語法問題上。心想也算是用了好些年的C++的,怎麼就出現這樣的問題呢?

     接下來就來說說這個問題吧。

     // 測試基類

struct Test_A

{

   void print(int a)

   {     printf("fuck\n");  }

};

// 測試子類

struct Test_B : public Test_A

{

   void print()

   {     printf("shit\n");  }

};

 

 

void main()

{

   Test_B tb;

   // 在此我想要通過tb調用基類的print函數

   tb.print(0); // 在此卻編譯不過。 'Test_B::print' :function does not take 1 arguments

}

   遇到這個編譯報錯,我就傻眼了。函數在子類和父類中雖然同名,可簽名不同啊,怎麼就出現這樣的報錯。真是百思不得其解啊。於是嘗試着用其他方法調用父類的同名函數。

void main()

{

   Test_B tb;

   // 在此我想要通過tb調用基類的print函數

   //tb.print(0);  // 在此卻編譯不過。 'Test_B::print' : function does not take 1 arguments

   static_cast<Test_A*>(&tb)->print(0);

}

     雖然寫法醜了點,可算是能夠成功編譯了。調試調用也沒有什麼問題。可畢竟寫法還是不好看。於是又嘗用其他的辦法,在此突然意識到C++好像可以這樣顯示的調用父類成員方法。

void main()

{

   Test_B tb;

   // 在此我想要通過tb調用基類的print函數

   //tb.print(0);  // 在此卻編譯不過。 'Test_B::print' : function does not take 1 arguments

   // 成功

   //static_cast<Test_A*>(&tb)->print(0);

   // 成功

   tb.Test_A::print(0);

}

     到此也算是圓滿解決這個小問題了。只是還是有點感慨啊,這語法規則…

(vc2010環境)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章