西安石油大学大二上C++面向对象程序设计课件第3章程序1.docx
《西安石油大学大二上C++面向对象程序设计课件第3章程序1.docx》由会员分享,可在线阅读,更多相关《西安石油大学大二上C++面向对象程序设计课件第3章程序1.docx(16页珍藏版)》请在冰点文库上搜索。
![西安石油大学大二上C++面向对象程序设计课件第3章程序1.docx](https://file1.bingdoc.com/fileroot1/2023-6/18/78e648ec-28a3-467f-92e6-1cd153eafcf9/78e648ec-28a3-467f-92e6-1cd153eafcf91.gif)
西安石油大学大二上C++面向对象程序设计课件第3章程序1
//Exam3-1.h
#include
#include
classComplex
{
private:
floatreal;//实部
floatimag;//虚部
public:
Complex(floatx=0,floaty=0)//构造函数
{
real=x;
imag=y;
}
~Complex()//析构函数
{}
ComplexAdd(Complexx)//加
{
Complexz;
z.real=real+x.real;
z.imag=imag+x.imag;
returnz;
}
ComplexSubtract(Complexx)//减
{
returnComplex(real-x.real,imag-x.imag);
}
ComplexMultiply(Complexx)//乘
{
Complexz;
z.real=(real*x.real-imag*x.imag);
z.imag=(real*x.imag+x.real*imag);
returnz;
}
ComplexDivide(Complexx)//除
{
Complexz;
floatc=x.real*x.real+x.imag*x.imag;
if(c==0)
{
cout<<"分母为0错!
";
exit(0);
}
else
{
z.real=(real*x.real+imag*x.imag)/c;
z.imag=(x.real*imag-real*x.imag)/c;
returnz;
}
}
voidshow()//输出
{
cout<<"realis"<cout<<"imagis"<}
};//注意:
分号不能省略
//Exam3-3.cpp
#include"Exam3-1.h"
voidmain(void)
{
Complexx(1,1),y(2,2),z1,z2,z3,z4;//定义对象
z1=x.Add(y);
cout<<"z1is:
";
z1.show();
z2=x.Subtract(y);
cout<<"z2is:
";
z2.show();
z3=x.Multiply(y);
cout<<"z3is:
";
z3.show();
z4=x.Divide(y);
cout<<"z4is:
";
z4.show();
}
//Exam3-5.h
#include
#include
classComplex
{
private:
floatreal;//实部
floatimag;//虚部
public:
Complex(floatx=0,floaty=0):
//造函数
real(x),imag(y)
{}
~Complex()//析构方法
{}
ComplexAdd(constComplexx)const;//加
ComplexSubtract(constComplexx)const;//减
ComplexMultiply(constComplexx)const;//乘
ComplexDivide(constComplexx)const;//除
voidshow(void)const;//输出
};
//成员函数实现部分
ComplexComplex:
:
Add(constComplexx)const//加
{
returnComplex(real+x.real,imag+x.imag);
}
ComplexComplex:
:
Subtract(constComplexx)const//减
{
returnComplex(real-x.real,imag-x.imag);
}
ComplexComplex:
:
Multiply(constComplexx)const//乘
{
returnComplex(real*x.real-imag*x.imag,
real*x.imag+x.real*imag);
}
ComplexComplex:
:
Divide(constComplexx)const//除
{
floatc=x.real*x.real+x.imag*x.imag;
if(c==0)
{
cout<<"分母为0错!
";
exit(0);
}
else
returnComplex((real*x.real+imag*x.imag)/c,
(x.real*imag-real*x.imag)/c);
}
voidComplex:
:
show(void)const//输出
{
cout<<"realis"<cout<<"imagis"<}
voidmain(void)
{
Complexx(1,1),y(2,2),z1,z2,z3,z4;//定义对象
z1=x.Add(y);
cout<<"z1is:
";
z1.show();
z2=x.Subtract(y);
cout<<"z2is:
";
z2.show();
z3=x.Multiply(y);
cout<<"z3is:
";
z3.show();
z4=x.Divide(y);
cout<<"z4is:
";
z4.show();
}
//Date.h
#include
classDate
{
private:
intmonth;//月
intday;//日
intyear;//年
public:
Date(intm=1,intd=1,inty=2000):
//构造函数1
month(m),day(d),year(y)
{}
Date(Date&d)//构造函数2
{
month=d.month;
day=d.day;
year=d.year;
}
~Date(void)
{}
voidPrintDate(void)const//输出
{
cout<}
};
//Exam3-6.cpp
#include"Date.h"
voidmain(void)
{
Datetoday(8,23,2005);//使用构造函数1的对象定义
DatesomeDay;//使用默认值的对象定义
DatesomeDay2(today);//使用构造函数2的对象定义
DatesomeArrayDay[4];//使用默认值的数组对象定义
today.PrintDate();//打印当前日期
someDay.PrintDate();//打印默认值日期
someDay2.PrintDate();//打印当前日期
someArrayDay[0].PrintDate();//打印默认值日期
someArrayDay[3].PrintDate();//打印默认值日期
}
//Exam3-4.cpp
#include
#include
classArray//Array类
{
private:
double*arr;//数组指针
intsize;//数组个数
public:
Array(intsz=100);//构造函数
~Array(void);//析构函数
};
Array:
:
Array(intsz)//构造函数
{
if(sz<=0)
{
cout<<"参数错!
"<exit(0);
}
size=sz;
arr=newdouble[size];//动态申请
}
Array:
:
~Array(void)//析构函数
{
delete[]arr;//动态释放
}
voidmain(void)
{
Arraya(10);
}
//Exam3-14.cpp
#include
#include
classEmployee//Employee类
{
private:
charname[30];//姓名
floatsalary;//薪水
staticfloatallSalary;//薪水总和,static成员变量
public:
Employee(char*n,floats)//构造函数
{
strcpy(name,n);
salary=s;
allSalary=allSalary+salary;
}
~Employee(void)//析构函数
{
allSalary=allSalary-salary;
}
staticfloatGetAllSalary(void)//输出薪水总和
{
returnallSalary;
}
};
floatEmployee:
:
allSalary=0;//Static成员变量赋初值
voidmain(void)
{
floatall;
Employee*e1=newEmployee("张三",100);
all=Employee:
:
GetAllSalary();
cout<<"AllSalary="<Employee*e2=newEmployee("王四",200);
all=Employee:
:
GetAllSalary();
cout<<"AllSalary="<Employee*e3=newEmployee("李五",300);
all=Employee:
:
GetAllSalary();
cout<<"AllSalary="<deletee1;
all=Employee:
:
GetAllSalary();
cout<<"AllSalary="<deletee2;
all=Employee:
:
GetAllSalary();
cout<<"AllSalary="<deletee3;
all=Employee:
:
GetAllSalary();
cout<<"AllSalary="<}
【例3.1】设计一个简单的银行贷记卡系统。
设计要求:
(1)客户余额的输出采用类似3元3角1分这样的形式。
(2)允许客户存款、取款和转账,并允许客户取款时透支,即允许客户欠款。
(3)设计一个主程序进行基本情况的演示。
设计分析:
银行贷记卡是一种允许客户透支的新的银行业务。
银行贷记卡客户的操作允许存款、取款、转账和输出,并允许取款时透支。
因此,银行贷记卡类应该有客户账号、姓名和余额成员变量;应该有存款、取款、转账和输出成员函数。
系统要求客户余额的输出采用类似3元3角1分这样的形式,这需要特殊处理,因此,应该把贷记卡类里的成员变量余额设计成一个余额类。
余额类应该有余额成员变量;应该有加款、减款和输出成员函数。
贷记卡类和余额类之间是一种整体—部分模式(或称包含关系),即余额类是组成贷记卡类的一部分。
根据以上对银行贷记卡问题的设计分析,可以得到如图3.4所示的对象模型图。
图3.2银行贷记卡问题的对象模型图
余额类和贷记卡类设计如下:
//Account.h
#include
#include
#include
classMoney//余额类Money
{
private:
floatamount;//余额
public:
Money(floata=0):
amount(a)//构造函数
{}
~Money()//析构函数
{}
voidAdd(constfloatx);//增加
voidSub(constfloatx);//减少
voidPrint(void)const;
};
voidMoney:
:
Add(constfloatx)//增加
{
amount=amount+x;
}
voidMoney:
:
Sub(constfloatx)//减少
{
amount=amount-x;
}
voidMoney:
:
Print(void)const//输出
{
floattemp=amount;
if(amount>=0)
{
cout<<"余额:
";
}
else
{
cout<<"欠款:
";
temp=-temp;
}
intyuan=int(temp);
cout<intjiao=int((temp-yuan)*10);
cout<intfen=int(ceil(temp*100-yuan*100.0-jiao*10.0));
cout<}
classAccount//贷记卡类Account
{
private:
longaccountNo;//账号
charname[30];//姓名
Moneyremains;//余额
public:
Account(longa,char*n,Moneyr):
//构造函数
accountNo(a),remains(r)
{
strcpy(name,n);
}
~Account()//析构函数
{}
voidAdd(constfloatx);//存款
voidSub(constfloatx);//取款
voidtransfer(Account&a,constfloatx);//转账
voidPrint(void)const;//输出
};
voidAccount:
:
Add(constfloatx)//存款
{
remains.Add(x);
}
voidAccount:
:
Sub(constfloatx)//取款
{
remains.Sub(x);
}
voidAccount:
:
transfer(Account&a,constfloatx)//转账
{
remains.Sub(x);//当前对象余额减少
a.remains.Add(x);//对象a余额增加
}
voidAccount:
:
Print(void)const//输出
{
cout<<"姓名:
"<cout<<"账户:
"<remains.Print();
}
测试主函数设计如下:
//Exam3-16.cpp
#include"Account.h"//包含Account.h文件
voidmain(void)
{
Accounta1(100000,"张三",Money(3.31));
Accounta2(100001,"李四",Money(40.42));
Accounta3(100002,"王五",Money(-500.50));
a1.transfer(a2,100);//客户a1转账给客户a2
a2.Add(50);//客户a2存款
a3.Sub(100);//客户a3取款
a1.Print();//输出客户a1
a2.Print();
a3.Print();
}
程序运行结果如下:
姓名:
张三
账户:
100000
欠款:
96元6角10分
姓名:
李四
账户:
100001
余额:
190元4角2分
姓名:
王五
账户:
100002
欠款:
600元5角0分