2016-02-23 3 views
-1

Я пытаюсь вызвать метод convert (double) из моего дочернего класса: Kilogram. Как я могу назвать переопределенную функцию, а не оригинал. Ниже приведен мой код для моих трех классов.C++ Вызов переопределенной функции дочернего класса вместо родительского класса

main.cpp

#include <iostream> 
#include <string> 
#include "Conversion.cpp" 

using namespace std; 

int userInput; 


Conversion con; 

void menu() { 
    cout << "Select an option: " << endl; 
    cout << "1) KG to Lbs " << endl; 
    cout << "2) Celsius to Kelvin " << endl; 
    cout << "3) Teaspoons to millilitres " << endl; 
    cout << "4) Multiplication tables (x) " << endl; 
    cout << "5) Powers Tables (x) " << endl; 
    cout << "6) Exit " << endl; 

    cin >> userInput; 

    switch(userInput) { 
     case 1: 
      cout << con.convert(23.56); 
      break; 
     default: 
      break; 
    } 
}; 

int main() { 
    menu(); 
    system("pause"); 
    return 0; 
} 

Conversion.cpp

class Conversion { 
public: 
    Conversion::Conversion(void) { 

    } 

    virtual double Conversion::convert(double varrr){ 

     return varrr; 
    } 
}; 

Kilogram.cpp

#include "Conversion.cpp" 

double pounds; 

class Kilogram : public Conversion { 
public: 
    Kilogram::Kilogram() { 

    } 

    virtual double Kilogram::convert(double kilos) override { 
     pounds = (kilos * 2.2); 
     return pounds; 
    } 

}; 

Любая помощь будет очень признателен!

+0

Почему бы это назвать? Ваша программа даже не создает * никаких объектов «Килограмм», а тем более вызывает их функции. – immibis

+0

Точно, я смущен, как это сделать. Я потратил пару часов на создание объектов Kilogram и попытался вызвать метод convert(), но результата нет, и я получаю большое количество ошибок. – Jon

ответ

0

Причина ваш код вызова определение базы происходит потому, что в:

Conversion con; 

... как объявленный тип и тип среды исполнения базового типа. Чтобы вызвать переопределенный метод, тип среды выполнения должен быть заданного производного типа, а объявленный тип должен быть либо производным, либо должен быть указателем или ссылкой на базовый тип. То есть:

Kilogram from_kilogram; 
Conversion from_pounds; 
Conversion* converter = &from_pounds; 
if (is_kilograms) { 
    converter = &from_kilogram; 
} 
result = converter->Convert(weight_in_pounds);