读书人

派生类调用有关问题

发布时间: 2012-02-19 19:43:38 作者: rapoo

派生类调用问题
class Base{
public:
foo(int);
protected:
int _bar;
double _foo_bar;
};
class Derived : public Base{
public:
foo(string);
bool bar(Base *pb);
void foobar();
//...
protected:
string _bar;
};

-------------------------
上面是派生类定义,如果要调用
Derived d;
d.foo(1024);
这显然是错的,需要在前面加上using Base::foo;
问题是:using Base::foo;这个句子是什么意思,有什么作用呢 ?

[解决办法]
using std::cin;的作用知道吗?
和此类似。具体看C++ Primer,关于重载解析的章节。
[解决办法]
因为在Derived类中的foo函数覆盖了基类的foo函数,使它在Derived类中的foo函数的作用域
不可见(即被隐藏),using Base::foo,可以使得基类的foo函数重新可见,即在编译器进行函数名字解析的时候会把这两个同名又同时可见的函数都作为候选函数对待,再根据函数参数进行解析,相当于函数重载。

读书人网 >C++

热点推荐