C++ 从基类指针调用派生函数(未重写)
我试图弄清楚如何从基类指针调用派生类专用方法,而不在基类和派生类中声明它C++ 从基类指针调用派生函数(未重写),c++,pointers,polymorphism,C++,Pointers,Polymorphism,我试图弄清楚如何从基类指针调用派生类专用方法,而不在基类和派生类中声明它virtual 我的代码是: 康托班加里奥 #ifndef BANCARIO_H #define BANCARIO_H class ContoBancario{ private: double saldo; public: ContoBancario(double); void setSaldo(double); double getSaldo();
virtual
我的代码是:
康托班加里奥
#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
康托文科拉托
#ifndef VINCOLATO_H
#define VINCOLATO_H
#include "ContoBancario.h"
class ContoVincolato:public ContoBancario {
private:
double tasso;
public:
ContoVincolato(double,double);
double calcolaInteresse ();
};
#endif
康托科伦特酒店
#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
现在,在我的主文件中,我创建了一个指向基类的指针向量,它指向两个类的实例:
ContoVincolato c1(2500, .05);
ContoCorrente c2 (1500, 1.5);
vector <ContoBancario *> conti(2);
conti[0]=&c1;
conti[1]=&c2;
ContoVincolato c1(2500.05);
ContoCorrente c2(1500,1.5);
载体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);
}
for(尺寸i=0;iritira(500);
conti[i]>存款(350);
}
但是:我不知道如何使用我在ContoVincolato.h中没有重写的方法,conti[0]->calcolaInteresse();
给出了编译器错误:
类ContoBancario没有名为“calcolaInteresse”的成员
我怎样才能解决这个问题呢?如果你不重新考虑你的课堂设计,方法是使用
动态\u cast
:
ContoCorrente *contoC = dynamic_cast<ContoCorrente *>(conti[0]);
if (contoC != nullptr)
{
val = contoC->calcolaInteresse();
}
ContoCorrente*contoC=dynamic_cast(conti[0]);
如果(contoC!=nullptr)
{
val=contoC->calcolaInteresse();
}
这需要在编译器中启用RTTI(运行时类型信息)
您可以通过正确设计类来解决这个问题,而不是试图找到一种方法来绕过糟糕的类设计。这不是唯一的编译器错误。在
ContoBancario
中也没有ritira
方法,也没有deposita
方法。有deposit
方法,因此可能atter是一个简单的打字错误(在应该进行剪切/粘贴,而不是在问题正文中进行内联代码创作的情况下,这会让我一直感到困惑)。类设计是给定的,不能更改