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