c++ 调用子类而不是父类的重写函数

c++ Calling the overridden function of the child class instead of the parent class

本文关键字:父类 重写 函数 调用 子类 c++      更新时间:2023-10-16

我正在尝试从我的子类调用方法convert(double):千克。我将如何调用被覆盖的函数而不是原始函数。下面是我的三个类的代码。

主.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;
}

转换.cpp

class Conversion {
public:
    Conversion::Conversion(void) {
    }
    virtual double Conversion::convert(double varrr){
        return varrr;
    }
};

公斤.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;
    }
};

任何帮助将不胜感激!

代码调用基定义的原因是:

Conversion con;

。声明的类型和运行时类型都是基类型。若要调用重写的方法,运行时类型必须是给定的派生类型,并且声明的类型必须是派生类型,或者必须是指向基类型的指针或引用。那是:

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