由抽象类继承而来的派生类的构造函数的问题,请看代码

lsk_30516 2006-11-03 10:46:58
我这个代码总是有一个错误,就是实例化派生类对象的时候,不知道派生类的对象是怎么调用基类的构造函数的,是什么顺序,反正就是派生类是如何构造的地方有点不太清楚,请各位指点以下。

#define max 100000
#include <iostream.h>
#include "Card.cpp"

class ATM //定义一个自动取款机的抽象类
{
protected:
Card myCard; //Card类的对象作为私有数据成员
float totalmoney; //取款机总钱数

public:
ATM(Card& card) : myCard(card)
{
totalmoney = max;
}

virtual bool Fetchmoney(float money) = 0;

virtual ~ATM()
{

}

};

class IndustryATM: public ATM //派生一个工商银行的类
{

bool Fetchmoney(float money)
{
if(myCard.GetCardType() == industry)
{
totalmoney = totalmoney - money;

if(myCard.ChangeMoney(money))
return true;
}
else
{
cout<<"非农业银行卡,需缴纳1%的手续费!"<<endl;

totalmoney = totalmoney - money;
money = money + money * 0.01;

if(myCard.ChangeMoney(money))
return true;
}
}
};

int main()
{
Card card("123",500,China); //实例化一个中国银行的卡密码123,现金500
IndustryATM myATM(card);//就是这里的问题老出现一个错误,不知到是怎么个构造顺序
return 1;
}
...全文
364 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BoXoft 2006-11-04
  • 打赏
  • 举报
回复
ATM(Card& card) : myCard(card)
{
totalmoney = max;
}
从ATM挪到IndustryATM
nule 2006-11-04
  • 打赏
  • 举报
回复
首先,#include <iostream.h>,iostream属于标准库,所以不要加.h才是标准的写法。
其次,定义对象就是调用构造函数生成对象的过程,IndustryATM这个类并没有一个参数为Card对象的构造函数,所以你的写法是错误的。这个类有多少种定义对象的格式决定于他有多少种构造函数的重载形式。
再次,对于基类构造函数的调用,由子类构造函数完成,要么在子类构造函数中显示调用父类构造函数,要么由编译器自动调用父类的无参构造函数。
lann64 2006-11-04
  • 打赏
  • 举报
回复
每个类有自己的构造函数,派生类并不会用基类构造函数构造自己。
你不写构造函数,系统只会生成默认构造函数,但不能生成你这样的以card为参数的构造函数。

你需要在class IndustryATM: public ATM //派生一个工商银行的类
里面定义以card类型为参数的构造函数。

构造函数可以简单调用基类的构造函数,但必须是显式调用。
lsk_30516 2006-11-04
  • 打赏
  • 举报
回复
ding
laiwusheng 2006-11-03
  • 打赏
  • 举报
回复
你的IndustryATM类没有定义构造函数

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧