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是一个简单的打字错误(在应该进行剪切/粘贴,而不是在问题正文中进行内联代码创作的情况下,这会让我一直感到困惑)。类设计是给定的,不能更改