基于面向对象思想的ATM系统设计与实现讨论课总结.ppt_第1页
基于面向对象思想的ATM系统设计与实现讨论课总结.ppt_第2页
基于面向对象思想的ATM系统设计与实现讨论课总结.ppt_第3页
基于面向对象思想的ATM系统设计与实现讨论课总结.ppt_第4页
基于面向对象思想的ATM系统设计与实现讨论课总结.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VC+讨论课总结,第一组小组成员:,银行卡 (数据成员),姓名 账号 密码 钱数,提款机 (成员函数),欢迎界面 存取款 查询余额 退卡,将银行卡(数据成员)与提款机(成员函数)放在一个类中,命名为ATM ATM类可以实现用户与自动取款机的交互,即完成取款,查询余额等功能 在类中全部数据成员均为私有成员,类中的成员函数均为公有成员,为实现各种操作提供接口,银行卡 (数据成员),姓名 name 账号account 密码password 钱数money,提款机 (成员函数),欢迎界面 输出“欢迎您,XXX” 取款 实现对money的访问与修改 查询余额 对money的访问 退卡 “谢谢使用,再见!

2、”,利用string定义可以省去定义一维字符数组的不便 string name; string account; string password; int money;,/定义姓名 /定义账号 /定义密码 /定义余额,数据成员,成员函数,void welcome() cout 欢迎您, name endl; ,void takemoney() cout a; if (money - a) 0)cout 余额不足,取款失败 endl; else money -= a;cout 取款成功n;,欢迎界面,取款,查询余额,void restmoney() cout 当前余额为 moneyendl;,退

3、卡,void bye() cout 感谢您的使用,再见! endl;,使用If实现验证账号与密码是否匹配,string showaccount( ) return(account); string showpassword( ) return (password);,string account2,password2; if (account2 = a.showaccount()p = ,MFC界面初步设计,登陆界面 2.选择界面 3.退卡界面,登陆界面,登陆界面 退卡界面,1.现实世界中卡和银行卡的继承关系2.用面向对象编程思想中的派生类来 模拟卡和银行卡的继承关系3.银行卡派生类的构造函数

4、和析构函数的定义4.银行卡派生类的构造函数和析构函数的执行顺序,1.现实世界中卡和银行卡的继承关系,现实世界中,银行卡,会员卡等卡类,他们的共同特点是具有开户人,账号以及密码的属性,而银行卡除了向卡类继承了这些之外,还具有金额的属性。,姓名,账号,密码,卡,银行卡,姓名,账号,密码,金钱,class bankcard:public card int money;/定义金钱 public: bankcard(string n, string a, string p, int m); ;,2.用面向对象编程思想中的派生类来模拟卡和银行卡的继承关系,class card protected: str

5、ing name;/定义姓名 string account;/定义账号 string password;/定义密码 public: card(string n, string a, string p); void modifypsw();/用于修改密码 ;,Bankcard类即银行卡类,公有继承了卡类的数据成员和成员函数,由于私有成员是不允许继承的,而公有成员无法实现类中数据的封装,因此将卡类中的三个数据成员都定义为保护属性。,3.银行卡派生类的构造函数和析构函数的定义,class card protected: string name; string account; string pass

6、word; public: card(string n, string a, string p); void modifypsw(); ; card:card(string n, string a, string p) name = n;/将n赋值给姓名 account = a;/将a赋值给账号 password = p;/将p赋值给密码 ,class bankcard:public card int money; public: bankcard(string n, string a, string p, int m); ; bankcard:bankcard (string n, stri

7、ng a, string p, int m) :card(n, a, p) money = m;/将m赋值给金钱 ,在bankcard的构造函数中利用初始化列表调用card类的构造函数,完成了传递参数的工作。,析构函数没有参数,因此可以选择使用系统默认的析构函数。在执行派生类bankcard的析构函数时,系统会自动调用基类card的析构函数,对基类card的对象进行清理。,由于在与ATM的交互中需要不断调用带有bankcard对象类型的函数,因此总有形参在不断消亡,因此也就不断调用析构函数,int main( ) bankcard b(张三, 001, 123456, 10000); . .

8、. return 0; ,举个例子,在执行该语句后,bankcard类中的b对象被初始化,调用了构造函数,即其name为张三,account为001,password为123456,金钱为10000。 在主函数返回0时,系统就会自动调用bankcard与card中的析构函数将对象进行清理,b也就不复存在了,4.银行卡派生类的构造函数和析构函数的执行顺序,先执行基类card的构造函数,再执行派生类bankcard的构造函数 析构函数执行顺序与其相反,先执行bankcard的析构函数,再执行card的析构函数。,class card protected: string name; string a

9、ccount; string password; public: card(string n, string a, string p); void modifypsw(); ;,card:card(string n, string a, string p) name = n;/将n赋值给姓名 account = a;/将a赋值给账号 password = p;/将p赋值给密码 cout“card构造函数被调用”endl; card()cout“card析构函数被调用”endl;,class bankcard:public card int money; public: bankcard(str

10、ing n, string a, string p, int m); ; bankcard:bankcard (string n, string a, string p, int m) :card(n, a, p) money = m;/将m赋值给金钱 cout“bankcard构造函数被调用”endl; bankcard()cout“bankcard析构函数被调用”endl;,int main() bankcard b(张三, 001, 123456, 10000); . . . return 0; ,1.如何利用运算符重载实现银行卡存款的增减,运算符重载函数分为: 1.类外定义的运算符重载

11、函数 2.友元运算符重载函数 3.成员运算符重载函数 在之前的讨论课中我们将ATM类声明为bankcard类的友元类,因此,利用运算符重载实现银行卡存款的增减时我们使用友元运算符重载函数,bankcard operator-(int m)money-=m; return*this; void ATM:takemoney(bankcard ,2.如何利用函数重载实现银行卡的编译时多态,函数重载包括普通成员函数重载和构造函数重载,也包括运算符重载,但是析构函数不能被重载。,User构造函数被重载,(1)构造函数重载,(2)成员函数重载 成员函数重载原理与构造函数相同,即被重载的函数为普通的成员函数

12、,函数名与类名不同,3.如何设计卡类和银行卡类的虚函数GetCardNumber()实现运行时多态,虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。,Virtual 函数类型 函数名 (形参表) 函数体 在基类中的某个成员被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义。其函数原型,包括函数类型,函数名,参数个数,参数类型的顺序,都必须与基类中的原型完全相同。,virtual void card:GetCardNumber() cout卡号为accountendl; virtual void bankcard:GetBankcardNumber() cout银行卡号为accountendl;,可以看到,基类的指针对象成员ptr在指向其基类card时调用的是card类中的GetCardNumber(),输出卡号;而指向其派生类b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论