使用具有同名方法的派生类对象访问基类的方法
Posted
技术标签:
【中文标题】使用具有同名方法的派生类对象访问基类的方法【英文标题】:Accessing base class's method with derived class's object which has a method of same name 【发布时间】:2010-03-13 07:07:07 【问题描述】:当使用派生类的对象访问“base”的 foo() 时。
#include <iostream>
class base
public:
void foo()
std::cout<<"\nHello from foo\n";
;
class derived : public base
public:
void foo(int k)
std::cout<<"\nHello from foo with value = "<<k<<"\n";
;
int main()
derived d;
d.foo();//error:no matching for derived::foo()
d.foo(10);
如何访问派生类中具有同名方法的基类方法。 已显示生成的错误。 如果我不清楚,我很抱歉,但我觉得我已经让自己像水一样清澈。 提前致谢。
【问题讨论】:
How to call a parent class function from derived class function?的可能重复 【参考方案1】:您可以将using base::foo
添加到您的派生类中:
class derived : public base
public:
using base::foo;
void foo(int k)
std::cout<<"\nHello from foo with value = "<<k<<"\n";
;
编辑:this question 的答案解释了为什么您的 base::foo()
在没有 using
声明的情况下不能从 derived
直接使用。
【讨论】:
但是为什么基类的 foo() 不能在派生类中访问,而我继承了该基类... @ashish:它是可访问的(表示公共/受保护/私有的访问说明符),但它是隐藏的。阅读 Josh 链接的问题:***.com/questions/1628768/… 哦,哇,我正要创建包装器来委托给隐藏的基本重载,只是为了将它们从派生对象中公开,有点像void foo() base::foo()
,然后想一定有更好的方法来做到这一点,谢天谢地,是的。也可以选择d.base::foo()
,但从客户端的角度来看,这似乎有点烦人。【参考方案2】:
d.base::foo();
【讨论】:
【参考方案3】:在派生类中添加以下语句:
using Base::foo ;
这应该可以达到目的。
当您在派生类中有一个与基类中的函数同名的函数时,基类的所有函数都是隐藏的,您必须明确地将它们带入派生类的范围内。
【讨论】:
【参考方案4】:我们可以使用派生类对象调用基类方法。按照下面的代码。
#include<iostream.h>
class base
public:
void fun()
cout<<"base class\n";
;
class der : public base
public:
void fun()
cout<<"derived class\n";
;
int main()
der d1;
d1.base::fun();
return 0;
输出将是基类。
【讨论】:
以上是关于使用具有同名方法的派生类对象访问基类的方法的主要内容,如果未能解决你的问题,请参考以下文章