我试图弄清楚如何从基类指针调用派生的仅类方法,而不在基类和派生类中声明它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中覆盖的方法,conti[0]->calcolaInteresse();
会给出编译错误:
班级ContoBancario没有名为&#39; calcolaInteresse&#39;的成员。
我怎么解决这个问题?
答案 0 :(得分:1)
如果您不重新考虑您的课程设计,可以使用dynamic_cast
:
ContoCorrente *contoC = dynamic_cast<ContoCorrente *>(conti[0]);
if (contoC != nullptr)
{
val = contoC->calcolaInteresse();
}
这要求在编译器中启用RTTI(运行时类型信息)。