从这对课程开始:
class A { // super class int x;public: voID foo (int y) {x = y;} // original deFinition};class B : public A { // derived class int x2;public: voID foo (int y,int z) {x2 = y + z;} // overloaded};
我可以轻松调用B :: foo():
B b; b.foo (1,2); // [1]
但是如果我尝试调用A :: foo()…
B b; b.foo (12); // [2]
…我得到一个编译错误:
test.cpp: In function 'voID bar()':test.cpp:18: error: no matching function for call to 'B::foo(int)'test.cpp:12: note: candIDates are: voID B::foo(int,int)
只是为了确保我没有丢失任何东西,我改变了B的功能的名称,以便没有超载:
class B : public A { int x2;public: voID stuff (int y,int z) {x2 = y + z;} // unique name};
现在我可以使用第二个例子来调用A :: foo().
这是标准吗我用g
解决方法 您需要在B类定义中使用using声明:class B : public A {public: using A::foo; // allow A::foo to be found voID foo(int,int); // etc.};
没有使用声明,编译器在名称查找期间找到B :: foo,并且有效地不搜索具有相同名称的其他实体的基类,因此未找到A :: foo.
总结以上是内存溢出为你收集整理的c – 重载超类的功能全部内容,希望文章能够帮你解决c – 重载超类的功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)