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环境)


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