预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共49页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

VC++讨论课总结银行卡 (数据成员)将银行卡(数据成员)与提款机(成员函数)放在一个类中,命名为ATM ATM类可以实现用户与自动取款机的交互,即完成取款,查询余额等功能 在类中全部数据成员均为私有成员,类中的成员函数均为公有成员,为实现各种操作提供接口银行卡 (数据成员)利用string定义可以省去定义一维字符数组的不便 stringname; stringaccount; stringpassword; intmoney;成员函数查询余额使用If实现验证账号与密码是否匹配 MFC界面初步设计登陆界面登陆界面退卡界面1.现实世界中卡和银行卡的继承关系2.用面向对象编程思想中的派生类来模拟卡和银行卡的继承关系3.银行卡派生类的构造函数和析构函数的定义4.银行卡派生类的构造函数和析构函数的执行顺序1.现实世界中卡和银行卡的继承关系classbankcard:publiccard{ intmoney;//定义金钱 public: bankcard(stringn,stringa,stringp,intm); };3.银行卡派生类的构造函数和析构函数的定义析构函数没有参数,因此可以选择使用系统默认的析构函数。在执行派生类bankcard的析构函数时,系统会自动调用基类card的析构函数,对基类card的对象进行清理。intmain() {bankcardb("张三","001","123456",10000); . . . return0; }4.银行卡派生类的构造函数和析构函数的执行顺序classcard{ protected: stringname; stringaccount; stringpassword; public: card(stringn,stringa,stringp); voidmodifypsw(); };classbankcard:publiccard{ intmoney; public: bankcard(stringn,stringa,stringp,intm); }; bankcard::bankcard (stringn,stringa,stringp,intm):card(n,a,p) { money=m;//将m赋值给金钱 cout<<“bankcard构造函数被调用”<<endl; } ~bankcard(){cout<<“bankcard析构函数被调用”<<endl;} 1.如何利用运算符重载实现银行卡存款的增减bankcardoperator-(intm){money-=m;return*this;} voidATM::takemoney(bankcard&x) { intm; cout<<“请输入想要取款的金额:"<<endl; cin>>m; x=x-m; cout<<“取款成功"<<endl; } 2.如何利用函数重载实现银行卡的编译时多态User构造函数被重载(2)成员函数重载 成员函数重载原理与构造函数相同,即被重载的函数为普通的成员函数,函数名与类名不同3.如何设计卡类和银行卡类的虚函数GetCardNumber()实现运行时多态Virtual函数类型函数名(形参表) { 函数体 } 在基类中的某个成员被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义。其函数原型,包括函数类型,函数名,参数个数,参数类型的顺序,都必须与基类中的原型完全相同。virtualvoidcard::GetCardNumber() {cout<<"卡号为"<<account<<endl;} virtualvoidbankcard::GetBankcardNumber() {cout<<"银行卡号为"<<account<<endl;} 可以看到,基类的指针对象成员ptr在指向其基类card时调用的是card类中的GetCardNumber(),输出卡号;而指向其派生类bankcard时调用的是bankcard中的GetCardNumber(),输出银行卡号MFC系统登陆界面:登陆成功,进入欢迎界面:1.取款界面2.查询余额3.修改密码修改密码之后重新登录系统界面,此时的密码已经是新修改的密码了 如果密码错误了就会弹出此对话框5.退出系统控制台代码部分