Inheritance and method overloading
10,142
The B::rofl(int)
'hides' the A::rofl()
. In order to have A
's rofl
overloads, you should declare B
to be using A::rofl;
.
class B : public A {
public:
using A::rofl;
...
};
This is a wise move of C++: it warns you that you probably also need to override the A::rofl()
method in B
. Either you do that, or you explicitly declare that you use A
's other overloads.
Comments
-
0xDEAD BEEF about 2 years
Why C++ compiler gives this error? Why i can access lol() from B, but can not access rofl() [without parameters]. Where is the catch?
class A { public: void lol(void) {} void rofl(void) { return rofl(0);} virtual void rofl(int x) {} }; class B : public A { public: virtual void rofl(int x) {} }; int _tmain(int argc, _TCHAR* argv[]) { A a; a.lol(); a.rofl(1); a.rofl(); B b; b.lol(); b.rofl(1); b.rofl(); //ERROR -> B::rofl function does not take 0 arguments return 0; }
-
0xDEAD BEEF about 14 yearsyep, but A::rofl() is not virtual. Thats the idea - rofl() allways calls virtual rofl(0).
-
xtofl about 14 years@0xDEAD BEEF: in that case, you intend to use it, so make that clear to the compiler by saying
using A::rofl;
. -
xtofl about 14 years@0xDEAD BEEF: btw, you are creating a 'non-virtual interface' this way; you probably want your
A::rofl(int)
to be pure virtual, and protected. -
0xDEAD BEEF about 14 yearsNo. I want to crate pure virtual Read(buffer, size, timeout), and wrapper (override) Read(buffer, size) { Read(buffer, size, 0);} BTW - using keyword works great!
-
Matthieu M. about 14 years
@xtofl
with such method names, the question was cut out for you :p