我正在用C++编写一个小程序,我该怎么玩多态。
因此,代码是这样的:C++虚拟方法重载/覆盖编译器错误
//Base.h
class Base{
public:
void method(const objectType1& stuff1);
//objectType1 is whatever type you what (int, string, ...)
protected:
Base(void);
virtual ~Base(void);
virtual void method(void) = 0;
};
//Derived.h
/*FINAL - DO NOT INHERIT THIS CLASS OR YOU WILL die :)*/
class Derived : public Base{
public:
Derived(void);
~Derived(void);
private:
void method(void);
};
//Main.cpp
int main(){
objectType1 ot1;
//this code works
Base *bd = new Derived;
bd->method(ot1);
//this dosen't
Derived *dd = new Derived;
dd->method(ot1);
// he doesn't call Base::method(const objectType1& stuff1),
// he calls Derived::method(void)
return 0;
}
我已经在别的重命名虚拟方法void method(void)
解决了这个问题,一切都很好。
我的问题是:
- 为什么不编译器知道要调用基类中的方法?
- ,为什么我看到
main
void method(void)
因为它被声明为Base
protected
和Derived
private
? (这是某种类型的副作用)
谢谢:)。
您标记了您的问题'编译器错误',所以,_什么是编译器errors_? – ildjarn 2012-01-30 22:24:41
是的,'编译器错误'标记不完全正确。 – Daniel 2012-01-31 09:04:15