关于C++:使用具有同名方法的派生类对象访问基类的方法

Accessing base class's method with derived class's object which has a method of same name

当使用派生类的对象访问"base"的foo()时。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>

class  base
{
      public:
      void foo()
     {
        std::cout<<"
Hello from foo
"
;
     }
};

class derived : public base
{
     public:
     void foo(int k)
     {
        std::cout<<"
Hello from foo with value ="
<<k<<"
"
;
     }
};
int main()
{
      derived d;
      d.foo();//error:no matching for derived::foo()
      d.foo(10);

}

如何访问派生类中同名方法的基类方法。已显示生成的错误。如果我不清楚,我道歉,但我觉得我已经把自己弄清楚了。事先谢谢。


您可以将using base::foo添加到派生类中:

1
2
3
4
5
6
7
8
9
10
11
class derived : public base
{
public:
     using base::foo;
     void foo(int k)
     {
        std::cout<<"
Hello from foo with value ="
<<k<<"
"
;
     }
};

编辑:这个问题的答案解释了为什么没有using声明,你的base::foo()不能从derived直接使用。


1
d.base::foo();


向派生类添加以下语句:

1
using Base::foo ;

这应该符合目的。

当派生类中有一个函数与基类中的一个函数同名时,基类的所有函数都将被隐藏,并且您必须将它们显式地放在派生类的范围内,如前所述。


我们可以使用派生类对象调用基类方法。按照下面的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream.h>
class base
{
public:
void fun()
{
    cout<<"base class
"
;
}
};
class der : public base
{
public:
void fun()
{
cout<<"derived class
"
;
}
};
int main()
{

der d1;


d1.base::fun();


return 0;
}

输出将是基类。