首页 文章

从基类指针调用派生函数(未重写)

提问于
浏览
-2

我试图弄清楚如何从基类指针调用派生的仅类方法,而不在基类和派生类中声明它 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 回答

  • 1

    如果你不重新考虑你的课程设计,那么这样做的方法是 dynamic_cast

    ContoCorrente *contoC = dynamic_cast<ContoCorrente *>(conti[0]);
    if (contoC != nullptr)
    {
        val = contoC->calcolaInteresse();
    }
    

    这要求在编译器中启用RTTI(运行时类型信息) .

    http://en.cppreference.com/w/cpp/language/dynamic_cast

相关问题