我有一個簡單的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