C标准有什么东西阻止我超载超级类的功能吗?
从这对课程开始:
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