c – 重载超类的功能

c – 重载超类的功能,第1张

概述C标准有什么东西阻止我超载超级类的功能吗? 从这对课程开始: class A { // super class int x;public: void foo (int y) {x = y;} // original definition};class B : public A { // derived class int x2;publ 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

解决方法 您需要在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 – 重载超类的功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存