2014-05-12 3 views
-4

J'ai une classe test_d qui hérite publiquement de la classe test_b. La classe test_d a une fonction getValues() que j'ai besoin d'appeler en utilisant un objet de classe test_b. J'ai essayé d'utiliser dynamic_cast et reinterpret_cast mais cela n'a pas fonctionné. Y a-t-il un autre moyen de le faire?Utilisation de la fonction Dérivée de la classe de base

class test_b { 
// this is the base class 
}; 

class test_d : public test_b { 
// this is the derived class 

public int getValues() const; // this is the function I need to use. 
}; 

test_b* objB = new test_d; 
dynamic_cast<test_d*>(objB)->getValues(); // this is what I am doing. 
+1

Cela ressemble à un design fortement vicié ... –

+1

Pouvez-vous élaborer sur "ça n'a pas fonctionné"? Le 'dynamic_cast' semble avoir fonctionné (en ignorant le fait que les classes de base ne devraient pas connaître leurs types dérivés.) – juanchopanza

+0

ressemble à une OOP cassée – alex

Répondre

2

Dans votre interface, vous devez déclarer votre méthode en fonction virtuelle pure, puis dans votre classe dérivée, vous devez écrire une implémentation

class test_b 
{ 
public: 
    virtual int getValues() const = 0; 
}; 

class test_d : public test_b 
{ 
public: 
    virtual int getValues() const 
    { 
     return m_value; 
    } 
}; 

Et quelque part de votre main():

test_b* objB = new test_d; 
objB->getValues(); 

ce sont les bases de la POO: l'interface et une implémentation de l'interface

Questions connexes