我有一个简单的C++基类,派生类的例子。C++继承,隐藏基础方法
// Base.hpp
#pragma once
class Base
{
public:
virtual float getData();
virtual void setData(float a, float b);
virtual void setData(float d);
protected:
float data;
};
//Base.cpp
#include "stdafx.h"
#include "Base.hpp"
float Base::getData()
{
return data;
}
void Base::setData(float a, float b)
{
setData(a);
}
void Base::setData(float d)
{
data = d;
}
//Derived.hpp
#pragma once
#include "Base.hpp"
class Derived
: public Base
{
public:
virtual void setData(float d);
};
//Derived.cpp
#include "stdafx.h"
#include "Derived.hpp"
void Derived::setData(float d)
{
data = d + 10.0f;
}
如果我现在做一个指向Base的指针,这个编译好。
//Main.cpp
#include "stdafx.h"
#include "Base.hpp"
#include "Derived.hpp"
Base *obj = new Derived();
但是,如果我做一个指向派生类,那么编译器(VC 2008年和2010年)抱怨:
Main.cpp(12): error C2660: 'Derived::setData' : function does not take 2 arguments
这里是导致该错误代码:
//Main.cpp
#include "stdafx.h"
#include "Base.hpp"
#include "Derived.hpp"
Derived *obj = new Derived();
看来,基类方法正在被隐藏。我的印象是,由于基类方法是虚拟的,即使从派生指针查看它们也应该是可见的,或者我错了吗?
你的派生类是什么样的? – 2010-09-29 15:49:25
[Overlading a Base's Overloaded Function in C++]可能的重复(http://stackoverflow.com/questions/888235/overriding-a-bases-overloaded-function-in-c) – 2010-09-29 15:49:46