注册 登录
编程论坛 C++教室

哪里错了,求大神

l991160619 发布于 2013-09-02 17:28, 580 次点击
#include <iostream>
using namespace std;
class cCurrency
{
public:
    cCurrency(float fAmerican,float fEurope);
    virtual void Print_Exchange(){}
    void set();
protected:
    float fAmerican;
    float fEurope;
};

cCurrency::cCurrency(float fAmerican,float fEurope)
{
    this->fAmerican=fAmerican;
    this->fEurope=fEurope;
}

class cAmerican:public cCurrency
{
public:
    void Print_Exchange();
private:
    float RMB;
};
class cEurope:public cCurrency
{
public:
    void Print_Exchange();
private:
    float RMB;
};
void cAmerican::Print_Exchange()
{
    this->RMB=100*fAmerican;
    cout<<this->RMB<<endl;
}

void cEurope::Print_Exchange()
{
    this->RMB=100*fEurope;
    cout<<this->RMB<<endl;
}

void cCurrency::set()
{
    this->fAmerican=(float)6.3492;
    this->fEurope=(float)7.9365;
}

int main()
{
    cCurrency *pCurrency=new cCurrency(2,3);
    cAmerican A1;
    cEurope A2;
    pCurrency=&A1;
    pCurrency->set();
    pCurrency->Print_Exchange();
    pCurrency=&A2;
    pCurrency->set();
    pCurrency->Print_Exchange();
    system("pause");
    return 0;
}
6 回复
#2
peach54602013-09-02 17:36
error: implicit default constructor for 'cAmerican' must explicitly initialize the base class 'cCurrency' which does not have a default constructor
#3
l9911606192013-09-02 17:46
回复 2楼 peach5460
你有本事,你改
#4
peach54602013-09-02 18:11
我有本事,但我不改,请你注意说话的语气
#5
TonyDeng2013-09-02 18:21
这个类计划本来就是错的,改也白改。
#6
TonyDeng2013-09-02 20:48
基类的名字是“货币”,你居然在类上设计两个具体的货币字段“美元”和“欧元”,这是什么概念呀?“货币”只应有“名称”和“计量单位”、“价值”之类抽象的属性,派生类才是比这个基类更具体的子类,方才到“美元类”和“欧元类”、“人民币类”等等,每种具体子类有各自独特的表现,可以通过“价值”属性互相兑换。你看看你的设计,抽象类中夹杂实例属性,到派生类中还怎么沿用共性?你的两个派生子类是“美元”和“欧元”,它们自己怎么还可能再有美元和欧元的参数传入进去构造自身?你之所以无法换掉默认的构造函数,根源就在于整个概念系统(类树)的设计是错的,而语言的设计不允许构造函数是虚函数,也正是这个原因,因为它断定在逻辑上就不应该有这种需求!当你的编码遇到现在这种困境时,就要醒悟是设计的问题了。

[ 本帖最后由 TonyDeng 于 2013-9-2 21:01 编辑 ]
#7
yuccn2013-09-03 15:20
回复 3楼 l991160619
注意问问题的态度吧
1