定义一个类CPeople,具有身份号码(id,char[20])和姓名(name,char[10])两个数据成员,从CPeople类中再派生出CInternetUser类和CBankCustomer类,然后再从CInternetUser和CBankCustomer多重继承派生出CInternetBankCustomer类.。CInternetUser类有登录密码(password,char[20])属性和注册register(设置id, name和password),登录login(判断输入的id与password是否与对象注册的相同)成员函数。CBankCustomer类有余额(balance,double)属性和开户openAccount(设置客户姓名和id),存款deposit,取款withdraw以及缺省的构造函数。CInternetBankCustomer类包括有余额, 前一日余额, 当日收益,今日万元收益和上一日万元收益等5个数据成员,成员函数有缺省构造函数,存款和取款,设置万元收益,计算当日收益,登陆login(判断输入的id和密码是否与互联网用户的相同,同时从CBankCustomer继承的用户姓名和id要与从CInternetUser继承的相同)。CInternetBankCustomer类对象当日存款不计算收益,第2天开始才能计算收益,当日取款部分无收益。
时间: 2024-02-26 17:52:13 浏览: 41
下面是这个类的代码实现:
```c++
#include<iostream>
#include<string.h>
using namespace std;
//定义CPeople类
class CPeople{
protected:
char id[20];
char name[10];
public:
CPeople(char* id, char* name){
strcpy(this->id, id);
strcpy(this->name, name);
}
};
//定义CInternetUser类
class CInternetUser : virtual public CPeople{
protected:
char password[20];
public:
CInternetUser(char* id, char* name, char* password)
: CPeople(id, name){
strcpy(this->password, password);
}
void registerUser(char* id, char* name, char* password){
strcpy(this->id, id);
strcpy(this->name, name);
strcpy(this->password, password);
}
bool login(char* id, char* password){
if(strcmp(this->id, id) == 0 && strcmp(this->password, password) == 0)
return true;
else
return false;
}
};
//定义CBankCustomer类
class CBankCustomer : virtual public CPeople{
protected:
double balance;
public:
CBankCustomer(char* id, char* name)
: CPeople(id, name){
balance = 0;
}
void openAccount(char* id, char* name){
strcpy(this->id, id);
strcpy(this->name, name);
balance = 0;
}
void deposit(double amount){
balance += amount;
}
void withdraw(double amount){
balance -= amount;
}
};
//定义CInternetBankCustomer类
class CInternetBankCustomer : public CInternetUser, public CBankCustomer{
private:
double lastDayBalance; //前一日余额
double todayProfit; //当日收益
double todayMillionProfit; //今日万元收益
double lastDayMillionProfit; //上一日万元收益
public:
CInternetBankCustomer(char* id, char* name, char* password)
: CPeople(id, name), CInternetUser(id, name, password), CBankCustomer(id, name){
lastDayBalance = 0;
todayProfit = 0;
todayMillionProfit = 0;
lastDayMillionProfit = 0;
}
void setTodayMillionProfit(double todayProfit){
this->todayMillionProfit = todayProfit / (balance / 10000);
}
void calculateTodayProfit(){
todayProfit = (balance - lastDayBalance) * (todayMillionProfit - lastDayMillionProfit) / 10000;
lastDayBalance = balance;
lastDayMillionProfit = todayMillionProfit;
}
void login(char* id, char* password){
if(CInternetUser::login(id, password) && strcmp(CBankCustomer::name, name) == 0 && strcmp(CBankCustomer::id, id) == 0)
cout << "Login success!" << endl;
else
cout << "Login failed!" << endl;
}
};
```
这里使用了虚拟继承来解决多重继承的问题。CInternetUser和CBankCustomer都从CPeople派生,并且CInternetBankCustomer从它们两个多重继承,如果不使用虚拟继承的话,会导致CPeople的数据成员在CInternetBankCustomer中有两份副本,造成混乱和错误。