利用工程实现程序的多文件组织的程序

(1)实现3个类,即CBank类BBank类ABank类,分别为表示中国银行、工商银行和农业银行。每个类都包含一个整数类型的私有数据balance,用于存放储户在该行的存款数3个类中均包含私有数据balance以及无参构造函数有参构造函数设置存款数的成员函数setBalance以及获取款数的getBalance成员函数

(2)由于需要从外部对3个类的私有数据balance进行访问,因此可以为3个类设计一个公共的友元函数total(函数total的形参应均为常引用),这样通过友元函数即可统计出储户在这3家银行的总存款数并输出(每家银行一个账户)。要注意类的前向引用声明。 在main函数加入相应的测试代码。

(3)三个类的定义和实现分别放在文件cbank.h、bbank.h、abank.h、cbank.cpp、bbank. cpp、abank. Cpp中,主函数main放到main.cpp中,在正确的位置,添加编译预处理命令;并将它们组织成一个工程,编译执行。

(4)每个银行类中,添加一个私有的静态数据成员count,用于该银行的账户总数。并设计相应的静态成员函数getCount,以返回当前账户总数(注意:添加count成员之后,要编写正确的复制构造函数析构函数)。最后在main函数加入相应的测试代码。

(5)在cbank.cpp定义全局变量g_nCount,用于统计所有银行的账户数目,定义普通函数getAccountCount,用于返回g_nCount;在main()函数中直接访问g_nCount和调用getAccountCount ()两种方式输出账户总数

#cbank.h

#ifndef CBANK_H
#define CBANK_H
#include<iostream>
#include"bbank.h"
#include"abank.h"
using namespace std;
class ABank;//ABank类的向前引用声明
class BBank;//BBank类的向前引用声明
class CBank;//CBank类的向前引用声明

class CBank {
private:
	float balance;//用于存放储户在CBank银行的存款
	static int count;//统计这CBank家银行的账户数目
public:
	CBank() { balance = 0; };//无参构造函数
	CBank(float money) ;//有参构造函数count++用于统计账户数
	CBank(CBank& c);//复制构造函数
	~CBank() { count--; }//析构函数
	void setBalance();//用于设置储户在银行的存款数
	void getBalance();//用于获取存款数并输出
	friend void total(const CBank& c, const BBank& b, const ABank& a);//友元函数即可统计出储户在这3家银行的总存款数并输出
	static void getCount() { cout << "C银行已有账户数:" << count << endl;}//用于统计当前银行的账户总数
};
#endif

#cbank.cpp

#include<iostream>
#include"cbank.h"
#include"bbank.h"
#include"abank.h"
using namespace std;
int g_nCount = 0;//用于统计所有银行账户
int CBank::count = 0;//私有的静态数据成员count的初始化
CBank::CBank(float money) {//CBank的有参构造函数
	balance = money;
	count++;
	g_nCount++;
}
CBank::CBank(CBank& c) {//CBankl类的复制构造函数
	balance = c.balance;
	count++;
	g_nCount++;
}
void CBank::setBalance() {//CBank类的函数用于向银行存款
	float money;
	cout << "请输入向C银行存款的数目:" << endl;
	cin >> money;
	balance += money;
}
void CBank::getBalance() {//CBank类的函数用于输出该银行的存款数
	cout << "C银行当前存款余额为: " << balance << endl;
}

void total(const CBank& c, const BBank& b, const ABank& a) {//公共友元函数total统计出储户在这3家银行的总存款数并输出
	cout << "三个银行总存款数为: " << c.balance + b.balance + a.balance << endl;
}

int getAccountCount() {//统计银行总账户
	return g_nCount;
}

#bbank.h

#ifndef BBANK_H
#define BBANK_H 
#include<iostream>
#include"abank.h"
#include"cbank.h"
using namespace std;
class ABank;//ABank类的向前引用声明
class BBank;//BBank类的向前引用声明
class CBank;//CBank类的向前引用声明
class BBank {
private:
	float balance;//用于存放储户在BBank银行的存款
	static int count;//统计这BBank家银行的账户数目
public:
	BBank() { balance = 0; };//无参构造函数
	BBank(float money);//有参构造函数count++用于统计账户数
	BBank(BBank& b);//复制构造函数
	~BBank() { count--; }//析构函数
	void setBalance();//用于设置储户在银行的存款数
	void getBalance();//用于获取存款数并输出
	friend void total(const CBank& c, const BBank& b, const ABank& a);//友元函数即可统计出储户在这3家银行的总存款数并输出
	static void getCount() { cout << "B银行已有账户数:" << count << endl; }//用于统计当前银行的账户总数
};
#endif

#bbank.cpp 


#include"bbank.h"

#include<iostream>
using namespace std;
extern int g_nCount;//用于统计所有银行账户
int BBank::count = 0;//私有的静态数据成员count的初始化

BBank::BBank(float money) {//BBank类的有参构造函数
	balance = money;
	count++;
	g_nCount++;
}
BBank::BBank(BBank& b) {//BBankl类的复制构造函数
	balance = b.balance;
	count++;
	g_nCount++;
}

void BBank::setBalance() {//BBank类的函数用于向银行存款
	float money;
	cout << "请输入向B银行存款的数目:" << endl;
	cin >> money;
	balance += money;
}

void BBank::getBalance() {//BBank类的函数用于输出该银行的存款数
	cout << "B银行当前存款余额为: " << balance << endl;
}

 #abank.h

#ifndef ABANK_H
#define ABANK_H
#include<iostream>
#include"bbank.h"
#include"cbank.h"
using namespace std;
class ABank;//ABank类的向前引用声明
class BBank;//BBank类的向前引用声明
class CBank;//CBank类的向前引用声明

class ABank {
private:
	float balance;//用于存放储户在ABank银行的存款
	static int count;//统计这ABank家银行的账户数目
public:
	ABank() { balance = 0; }//无参构造函数
	ABank(float money);//有参构造函数count++用于统计账户数
	ABank(ABank& a);//复制构造函数
	~ABank() { count--; }//析构函数
	void setBalance();//用于设置储户在银行的存款数
	void getBalance();//用于获取存款数并输出
	friend void total(const CBank& c, const BBank& b, const ABank& a);//友元函数即可统计出储户在这3家银行的总存款数并输出
	static void getCount() { cout << "A银行已有账户数:" << count << endl; }//用于统计当前银行的账户总数
};
#endif

#abank.cpp

#include<iostream>
#include"abank.h"
extern int g_nCount;//用于统计所有银行账户
int ABank::count = 0;//私有的静态数据成员count的初始化
ABank::ABank(float money) {//ABank类的有参构造函数
	balance = money; 
	count++; 
	g_nCount++;
}
ABank::ABank(ABank& a) {//ABank类的复制构造函数
	balance = a.balance;
	count++;
	g_nCount++;
}
void ABank::setBalance() {//ABank类的函数用于向银行存款
	float money;
	cout << "请输入向A银行存款的数目:" << endl;
	cin >> money;
	balance += money;
}
void ABank::getBalance() {//ABank类的函数用于输出该银行的存款数
	cout << "A银行当前存款余额为: " << balance << endl;
}


#main.cpp 

#include<iostream>
#include"cbank.h"//中国银行类的定义
#include"bbank.h"//工商银行类的定义
#include"abank.h"//农业银行类的定义
using namespace std;
extern int g_nCount;
extern int getAccountCount();
int main() {
	CBank c(1000.5);//定义和初始化中国银行类对象
	BBank b(5200.1);
	ABank a(5384.2);
	c.getBalance();//调用CBank银行类的私有函数,获取私有数据balance
	b.getBalance();
	a.getBalance(); // 调用ABank银行类的私有函数,获取私有数据balance

	c.setBalance();
	c.getBalance();
	total(c, b, a);

	CBank _c(100.5);
	BBank _b(500.1);
	ABank _a(500.2);
	CBank c1(100);
	CBank c2(22);
	ABank a1(22);
	CBank::getCount();
	BBank::getCount();
	ABank::getCount();//获取该银行账户总数
	cout << "方式1:3家银行账户总数为:" << g_nCount << endl;
	cout << "方式2:3家银行账户总数为:"<<getAccountCount() << endl;
	return 0;
}	

本次实验主要需要大家正确理解作用域与可见性,了解对象的生存期;正确理解和使用静态变量和静态函数;正确理解和使用友元函数和友元类;了解编译预处理指令,掌握程序的多文件结构;了解调用外部变量和函数的方法;掌握通过工程实现程序的多文件组织的方法。

解题不易,希望大家可以多多支持!!自己会了才是真的会!!加油!

猜你喜欢

转载自blog.csdn.net/weixin_58170033/article/details/124198389