(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;
}
本次实验主要需要大家正确理解作用域与可见性,了解对象的生存期;正确理解和使用静态变量和静态函数;正确理解和使用友元函数和友元类;了解编译预处理指令,掌握程序的多文件结构;了解调用外部变量和函数的方法;掌握通过工程实现程序的多文件组织的方法。
解题不易,希望大家可以多多支持!!自己会了才是真的会!!加油!