Herança C ++, métodos básicos ocultos
Eu tenho uma classe base C ++ simples, exemplo de classe derivada.
// 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;
}
Se agora fizer um ponteiro para a Base, isso compila bem.
//Main.cpp
#include "stdafx.h"
#include "Base.hpp"
#include "Derived.hpp"
Base *obj = new Derived();
Mas se eu fizer um ponteiro para a classe Derived, o compilador (VC 2008 e 2010) reclama que:
Main.cpp(12): error C2660: 'Derived::setData' : function does not take 2 arguments
E aqui está o código que causa esse erro:
//Main.cpp
#include "stdafx.h"
#include "Base.hpp"
#include "Derived.hpp"
Derived *obj = new Derived();
Parece que os métodos da classe base estão sendo ocultos. Fiquei com a impressão de que, como os métodos da classe base são virtuais, eles deveriam estar visíveis mesmo quando vistos no ponteiro Derivado, ou estou errado?