【发布时间】:2021-05-31 07:19:19
【问题描述】:
#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, double B)
:amount(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::print,尽管你说你会。 -
如果您打算以多态方式使用它们,您还应该添加
virtual ~Currency() -
之前我在主要的 Dollar.print() 和 euro.print() 中调用它,但它给出了一个错误 no mathing function for call to Dollar:print,所以我不明白如何在 main 中调用它.当我覆盖打印时,它会给出标记的覆盖但不会覆盖
-
virtual void print()const;采用 0 个参数。对于覆盖此方法的方法,它必须采用 0 个参数 -
你没有将实例传递给其他成员,为什么你将一个传递给
print?
标签: c++ virtual-functions