问题描述
#include<iostream>
using namespace std;
class Currency
{
public:
virtual double toRubles()const = 0;
virtual void print()const;
};
class Dollar: public Currency
{
private:
double amount;
double rate;
public:
Dollar(double A,double B)
:amount(A),rate(B)
{}
Dollar()
:amount(0),rate(0)
{}
double GetA()const{return amount;}
double GetB()const{return rate;}
void SetA(double A){amount=A;}
void SetB(double B){rate=B;}
double toRubles()const override
{
return amount*rate;
}
void print(const Dollar& dollar)
{
cout << "Dollar:\n";
cout << "\t amount = " << dollar.GetA() << endl;
cout << "\t rate = " << dollar.GetB() << endl;
cout << "\t Rubles to Dollar = " << dollar.toRubles() << endl;
}
};
class Euro: public Currency
{
private:
double amount;
double rate;
public:
Euro(double A,rate(B)
{}
Euro()
:amount(0),rate(0)
{}
double GetA()const{return amount;}
double GetB()const{return rate;}
void SetA(double A){amount=A;}
void SetB(double B){rate=B;}
double toRubles()const override
{
return amount*rate;
}
void print(const Euro& euro)const
{
cout << "Euro:\n";
cout << "\t amount = " << euro.GetA() << endl;
cout << "\t rate = " << euro.GetB() << endl;
cout << "\t Rubles to Euro = " << euro.toRubles() << endl;
}
};
int main(){
double a,b,c,d;
cout << "Amount for DOLLAR:" ;
cin >> a;
cout << "Rate for DOLLAR:" ;
cin >> b;
cout << "Amount for EURO:" ;
cin >> c;
cout << "Amount for EURO:" ;
cin >> d;
Dollar dollar(a,b);
Euro euro(c,d);
}
编译时出现错误 undefined reference to vtable for Currency
和 ld returned 1 exit status
。没有虚函数,一切正常,当它们被调用时,程序给出了 print
方法的错误
程序必须将特定值从美元和欧元转换为卢布。类Currency
必须有两个虚函数进行转换toRubles
然后输出print
。
解决方法
您需要完全按照 Currency 中声明的方式覆盖 Dollar 和 Euro 类中的 virtual void print()const;
。同样在货币类中,必须定义函数或纯函数 (= 0)。