西安石油大学大二(上)C++面向对象程序设计课件第3章程序

更新时间:2024-03-16 14:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

//Exam3-1.h

#include #include

class Complex {

private:

float real; //实部 float imag; //虚部 public:

Complex(float x = 0, float y = 0) //构造函数 {

real = x; imag = y; }

~Complex() //析构函数 {}

Complex Add(Complex x) //加 {

Complex z;

z.real = real + x.real; z.imag = imag + x.imag; return z; }

Complex Subtract(Complex x) //减 {

return Complex(real - x.real, imag - x.imag); }

Complex Multiply(Complex x) //乘 {

Complex z;

z.real = (real * x.real - imag * x.imag); z.imag = (real * x.imag + x.real * imag); return z; }

Complex Divide(Complex x) //除 {

Complex z;

float c = 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; return z; } }

void show() //输出 {

cout << \

cout << \ }

}; //注意:分号不能省略

//Exam3-3.cpp

#include \

void main(void) { }

z4 = x.Divide(y); cout << \z4.show();

z3 = x.Multiply(y); cout << \z3.show();

z2 = x.Subtract(y); cout << \z2.show(); z1 = x.Add(y); cout << \z1.show();

Complex x(1, 1), y(2, 2), z1, z2, z3, z4;

//定义对象

//Exam3-5.h

#include #include class Complex {

private: };

//成员函数实现部分

Complex Complex::Add(const Complex x) const { }

Complex Complex::Subtract(const Complex x) const //减 { }

Complex Complex::Multiply(const Complex x) const //乘 { }

Complex Complex::Divide(const Complex x) const {

float c = x.real * x.real + x.imag * x.imag; if(c == 0) {

cout << \分母为0错! \

//除

return Complex(real * x.real - imag * x.imag,

real * x.imag + x.real * imag);

return Complex(real - x.real, imag - x.imag); return Complex(real + x.real, imag + x.imag);

//加

float real; float imag;

//实部 //虚部 //造函数

public:

Complex(float x = 0, float y = 0): {}

~Complex() {}

Complex Add(const Complex x) const;

//加 //减 //乘 //除 //输出

Complex Subtract(const Complex x) const; Complex Multiply(const Complex x) const; Complex Divide(const Complex x) const; void show(void) const;

//析构方法

real(x), imag(y)

}

exit(0);

else

return Complex((real * x.real + imag * x.imag) / c,

(x.real * imag - real * x.imag) / c);

}

void Complex::show(void) const

{ cout << \

cout << \

}

void main(void) { Complex x(1, 1), y(2, 2), z1, z2, z3, z4; z1 = x.Add(y); cout << \ z1.show();

z2 = x.Subtract(y); cout << \ z2.show(); z3 = x.Multiply(y); cout << \ z3.show();

z4 = x.Divide(y); cout << \ z4.show();

}

//Date.h

#include

class Date {

private: int month; //月

int day;

//日

//输出

//定义对象

};

int year; //年

public:

Date(int m = 1, int d = 1, int y = 2000): //构造函数1 {} { }

month = d.month; day = d.day; year = d.year;

//构造函数2

Date(Date &d)

month(m), day(d), year(y)

~Date(void) {}

void PrintDate(void) const { }

cout << month << \

//输出

//Exam3-6.cpp #include \

void main(void) { }

today.PrintDate(); someDay.PrintDate();

//打印当前日期 //打印默认值日期 //打印当前日期 //打印默认值日期 //打印默认值日期

Date today(8, 23, 2005); Date someDay;

Date someDay2(today); Date someArrayDay[4];

//使用构造函数1的对象定义 //使用默认值的对象定义 //使用构造函数2的对象定义 //使用默认值的数组对象定义

someDay2.PrintDate();

someArrayDay[0].PrintDate(); someArrayDay[3].PrintDate();

//Exam3-4.cpp

#include #include

class Array

{

private: double *arr; int size;

public:

Array(int sz = 100); ~Array(void);

};

Array::Array(int sz)

{ if(sz <= 0) { cout << \参数错!\ exit(0);

}

size = sz;

arr = new double[size];

}

Array::~Array(void)

{ delete []arr;

}

void main(void) { Array a(10);

}

//Exam3-14.cpp

#include #include

class Employee

{

private: char name[30];

float salary;

//Array类

//数组指针 //数组个数 //构造函数

//析构函数

//构造函数

//动态申请

//析构函数

//动态释放

//Employee类

//姓名 //薪水

};

static float allSalary;

//薪水总和,static成员变量 //构造函数

public:

Employee(char *n, float s) { }

~Employee(void) { }

static float GetAllSalary(void)

return allSalary;

//输出薪水总和

allSalary = allSalary - salary;

//析构函数

strcpy(name, n); salary = s;

allSalary = allSalary + salary;

{

}

float Employee::allSalary = 0;

void main(void) {

delete e2; delete e1; float all;

//Static成员变量赋初值

Employee *e1 = new Employee(\张三\all = Employee::GetAllSalary();

cout << \Employee *e2 = new Employee(\王四\all = Employee::GetAllSalary();

cout << \Employee *e3 = new Employee(\李五\all = Employee::GetAllSalary();

cout << \

all = Employee::GetAllSalary();

cout << \

all = Employee::GetAllSalary();

cout << \

}

delete e3;

all = Employee::GetAllSalary();

cout << \

【例3.1】 设计一个简单的银行贷记卡系统。 设计要求:

(1)客户余额的输出采用类似3元3角1分这样的形式。

(2)允许客户存款、取款和转账,并允许客户取款时透支,即允许客户欠款。 (3)设计一个主程序进行基本情况的演示。

设计分析:银行贷记卡是一种允许客户透支的新的银行业务。

银行贷记卡客户的操作允许存款、取款、转账和输出,并允许取款时透支。因此,银行贷记卡类应该有客户账号、姓名和余额成员变量;应该有存款、取款、转账和输出成员函数。

系统要求客户余额的输出采用类似3元3角1分这样的形式,这需要特殊处理,因此,应该把贷记卡类里的成员变量余额设计成一个余额类。余额类应该有余额成员变量;应该有加款、减款和输出成员函数。

贷记卡类和余额类之间是一种整体—部分模式(或称包含关系),即余额类是组成贷记卡类的一部分。

根据以上对银行贷记卡问题的设计分析,可以得到如图3.4所示的对象模型图。

贷记卡帐号姓名余额存款取款转帐输出余额余额加款减款输出 图3.2 银行贷记卡问题的对象模型图

余额类和贷记卡类设计如下:

//Account.h

#include #include #include

class Money {

private:

public:

//余额

float amount;

//余额类Money

};

Money(float a = 0): amount(a) {} ~Money() {}

void Add(const float x); void Sub(const float x); void Print(void) const;

//构造函数

//析构函数

//增加 //减少

void Money::Add(const float x) { }

void Money::Sub(const float x) { }

void Money::Print(void) const { }

int yuan = int(temp); cout << yuan << \元\float temp = amount; if(amount >= 0 ) { } else { }

cout << \欠款:\temp = -temp; cout << \余额:\

amount = amount - x; amount = amount + x;

//增加

//减少

//输出

int jiao = int((temp - yuan) * 10); cout << jiao << \角\

int fen = int(ceil(temp * 100 - yuan * 100.0 - jiao * 10.0)); cout << fen << \分\

class Account {

private: };

~Account() {}

//贷记卡类Account

long accountNo; char name[30]; Money remains;

//账号 //姓名 //余额 //构造函数

public:

Account(long a, char *n, Money r): { }

//析构函数

strcpy(name, n);

accountNo(a), remains(r)

void Add(const float x);

//存款 //取款 //输出

void Sub(const float x); void Print(void) const;

void transfer(Account &a, const float x); //转账

void Account::Add(const float x) { }

void Account::Sub(const float x) { }

remains.Sub(x); remains.Add(x);

//存款

//取款

void Account::transfer(Account &a, const float x) //转账 { }

void Account::Print(void) const { }

cout << \姓名:\cout << \账户:\remains.Print();

//输出

remains.Sub(x);

//当前对象余额减少 //对象a余额增加

a.remains.Add(x);

测试主函数设计如下:

//Exam3-16.cpp #include \

void main(void) { Account a1(100000, \张三\Account a2(100001, \李四\Account a3(100002, \王五\

//包含Account.h文件

a1.transfer(a2, 100); a2.Add(50); a3.Sub(100);

a1.Print();

a2.Print(); a3.Print();

}

程序运行结果如下:

姓名:张三 账户:100000 欠款:96元6角10分 姓名:李四 账户:100001 余额:190元4角2分 姓名:王五 账户:100002 欠款:600元5角0分

//客户a1转账给客户a2 //客户a2存款 //客户a3取款

//输出客户a1

测试主函数设计如下:

//Exam3-16.cpp #include \

void main(void) { Account a1(100000, \张三\Account a2(100001, \李四\Account a3(100002, \王五\

//包含Account.h文件

a1.transfer(a2, 100); a2.Add(50); a3.Sub(100);

a1.Print();

a2.Print(); a3.Print();

}

程序运行结果如下:

姓名:张三 账户:100000 欠款:96元6角10分 姓名:李四 账户:100001 余额:190元4角2分 姓名:王五 账户:100002 欠款:600元5角0分

//客户a1转账给客户a2 //客户a2存款 //客户a3取款

//输出客户a1

本文来源:https://www.bwwdw.com/article/ryi8.html

Top