我试图弄清楚如何从基类指针调用派生的仅类方法,而不在基类和派生类中声明它 virtual
.
我的代码是:
ContoBancario.h
#ifndef BANCARIO_H
#define BANCARIO_H
class ContoBancario{
private:
double saldo;
public:
ContoBancario(double);
void setSaldo(double);
double getSaldo();
virtual void deposita (double);
virtual void ritira (double);
};
#endif
ContoVincolato.h
#ifndef VINCOLATO_H
#define VINCOLATO_H
#include "ContoBancario.h"
class ContoVincolato:public ContoBancario {
private:
double tasso;
public:
ContoVincolato(double,double);
double calcolaInteresse ();
};
#endif
ContoCorrente.h
#ifndef CORRENTE_H
#define CORRENTE_H
#include "ContoBancario.h"
class ContoCorrente : public ContoBancario {
private:
double costoOp;
public:
ContoCorrente(double,double);
void setCostoOp(double);
virtual void deposita(double);
virtual void ritira(double);
};
#endif
现在,在我的主文件中,我创建了一个指向基类的指针向量,指向2个类的实例:
ContoVincolato c1(2500, .05);
ContoCorrente c2 (1500, 1.5);
vector <ContoBancario *> conti(2);
conti[0]=&c1;
conti[1]=&c2;
所以我只使用指针访问重新定义的虚函数
for (size_t i=0;i<conti.size();i++){
conti[i]->ritira(500);
conti[i]->deposita(350);
}
但是:我可以在ContoVincolato.h中覆盖_11599699_, conti[0]->calcolaInteresse();
给出了编译器错误:
ContoBancario类没有名为'calcolaInteresse'的成员 .
我该怎么解决这个问题?
1 回答
如果你不重新考虑你的课程设计,那么这样做的方法是
dynamic_cast
:这要求在编译器中启用RTTI(运行时类型信息) .
http://en.cppreference.com/w/cpp/language/dynamic_cast