4_1
#ifndef _SCLASS4_1_CEMPLOYEE_H_
#define _SCLASS4_1_CEMPLOYEE_H_
#include <iostream>
using namespace std;
class CEmployee
{
public:
CEmployee(float salary=2000)
{
m_salary=salary;
}
virtual ~CEmployee(){}
void SetData()
{
cout<<"CEmployee's salary is:";
cin>>m_salary;
}
virtual float Salary()const
{
return m_salary;
}
void ShowWage()const
{
cout<<"CEmployee's salary is"<<Salary()<<endl;
}
protected:
float m_salary;
};
class CSalesman:virtual public CEmployee
{
public:
CSalesman(float salary=2000,float reward=0):CEmployee(salary)
{
m_reward=reward;
}
float Salary()
{
m_salary=m_salary+m_reward*0.05;
return m_salary;
}
void SetData()
{
cout<<"CSaleman's reward is:";
cin>>m_reward;
}
void ShowWage()
{
cout<<"CSaleman's salary is"<<Salary()<<endl;
}
~CSalesman(){}
private:
float m_reward;
};
class CDeskman:virtual public CEmployee
{
public:
CDeskman(float salary=2000,int rateOfAppear=0):CEmployee(salary)
{
m_rateOfAppear=rateOfAppear;
}
void ShowWage()//const 函数只能调用const的函数
{
cout<<"CDeskman's salary is"<<Salary()<<endl;
}
double Salary()
{
m_salary=m_salary+((m_rateOfAppear-m_rateOfAppear%8)/8)*100;
return m_salary;
}
~CDeskman(){}
void SetData()
{
cout<<"CDeskman's rateOfAppear is:";
cin>>m_rateOfAppear;
}
private:
int m_rateOfAppear;
};
class CBuyer:virtual public CEmployee
{
public:
CBuyer(float salary=2000,float reducedBuyReward=0):CEmployee(salary),m_reducedBuyReward((int)reducedBuyReward)
{
;
}
~CBuyer(){}
float Salary()
{
m_reducedBuyReward=(m_reducedBuyReward-m_reducedBuyReward%100)/100;
m_salary=m_salary+m_reducedBuyReward*10;
return m_salary;
}
void SetData()
{
cout<<"CBuyer's reducedBuyReward is:";
cin>>m_reducedBuyReward;
}
void ShowWage()
{
cout<<"CBuyer's salary is"<<Salary()<<endl;//pow函数
}
private:
float m_buyReward;
int m_reducedBuyReward;
};
#endif
#include "sclass4_1_CEmployee.h"
void main()
{
CEmployee employee;
employee.ShowWage();
CSalesman salesman;
salesman.SetData();
salesman.ShowWage();
CDeskman deskman;
deskman.SetData();
deskman.ShowWage();
CBuyer buyer;
buyer.SetData();
buyer.ShowWage();
}
4_3
#ifndef _SCLASS4_3_CEMPLOYEE_H_
#define _SCLASS4_3_CEMPLOYEE_H_
#include <iostream>
using namespace std;
class CEmployee
{
public:
CEmployee(float salary=2000)
{
m_salary=salary;
}
virtual ~CEmployee(){}
void SetData()
{
cout<<"CEmployee's salary is:";
cin>>m_salary;
}
virtual float Salary()const
{
return m_salary;
}
void ShowWage()const
{
cout<<"CEmployee's salary is"<<Salary()<<endl;
}
protected:
float m_salary;
};
class CSalesman:virtual public CEmployee
{
public:
CSalesman(float salary=2000,float reward=0):CEmployee(salary)
{
m_reward=reward;
}
float Salary()
{
m_salary=m_salary+m_reward*0.05;
return m_salary;
}
void SetData()
{
cout<<"CSaleman's reward is:";
cin>>m_reward;
}
void ShowWage()
{
cout<<"CSaleman's salary is"<<Salary()<<endl;
}
~CSalesman(){}
protected:
float m_reward;
};
class CDeskman:virtual public CEmployee
{
public:
CDeskman(float salary=2000,int rateOfAppear=0):CEmployee(salary)
{
m_rateOfAppear=rateOfAppear;
}
void ShowWage()//const 函数只能调用const的函数
{
cout<<"CDeskman's salary is"<<Salary()<<endl;
}
double Salary()
{
m_salary=m_salary+((m_rateOfAppear-m_rateOfAppear%8)/8)*100;
return m_salary;
}
~CDeskman(){}
void SetData()
{
cout<<"CDeskman's rateOfAppear is:";
cin>>m_rateOfAppear;
}
protected:
int m_rateOfAppear;
};
class CBuyer:virtual public CEmployee
{
public:
CBuyer(float salary=2000,float reducedBuyReward=0):CEmployee(salary),m_reducedBuyReward((int)reducedBuyReward)
{
;
}
~CBuyer(){}
float Salary()
{
m_reducedBuyReward=(m_reducedBuyReward-m_reducedBuyReward%100)/100;
m_salary=m_salary+m_reducedBuyReward*10;
return m_salary;
}
void SetData()
{
cout<<"CBuyer's reducedBuyReward is:";
cin>>m_reducedBuyReward;
}
void ShowWage()
{
cout<<"CBuyer's salary is"<<Salary()<<endl;//pow函数
}
protected:
float m_buyReward;
int m_reducedBuyReward;
};
class CManager:virtual public CSalesman,virtual public CDeskman,virtual public CBuyer
{
public:
CManager(float salary=2000,float reward=0,int rateOfAppear=0,float reducedBuyReward=0):CSalesman(salary,reward),CDeskman(salary,rateOfAppear),CBuyer(salary,reducedBuyReward)
{
;
}
~CManager(){};
float Salary()
{
m_reward=m_reward*0.05+CBuyer::Salary()-2000;
m_salary=2000;
cout<<"reward"<<m_reward<<endl;
m_salary=m_reward+CDeskman::Salary();
cout<<"salary"<<m_salary<<endl;
return m_salary;
}
void ShowWage()
{
cout<<"Manager's salary is:"<<Salary()<<endl;
}
void SetData()
{
cout<<"Manager's reward is:";
cin>>m_reward;
cout<<"Manager's rateOfAppear is:";
cin>>m_rateOfAppear;
cout<<"Manager's reducedBuyReward is:";
cin>>m_reducedBuyReward;
}
};
#endif
#include "sclass4_3_CEmployee.h"
void main()
{
CEmployee employee;
employee.ShowWage();
CSalesman salesman;
salesman.SetData();
salesman.ShowWage();
CDeskman deskman;
deskman.SetData();
deskman.ShowWage();
CBuyer buyer;
buyer.SetData();
buyer.ShowWage();
CManager manager;
manager.SetData();
manager.ShowWage();
}
4_4
#include "sclass4_4_CEmployee.h"
float CSalesman:: GetSumOfReward()
{
return sumOfReward;
}
int CBuyer::GetSumOfReducedBuyReward()
{
return sumOfReducedBuyReward;
}
#ifndef _SCLASS4_4_CEMPLOYEE_H_
#define _SCLASS4_4_CEMPLOYEE_H_
#include <iostream>
#include <cmath>
#include <cctype>
using namespace std;
class CEmployee
{
public:
CEmployee(float salary=2000)
{
m_salary=salary;
}
virtual ~CEmployee(){}
void SetData()
{
cout<<"CEmployee's salary is:";
cin>>m_salary;
}
virtual float Salary()const
{
return m_salary;
}
void ShowWage()const
{
cout<<"CEmployee's salary is"<<Salary()<<endl;
}
protected:
float m_salary;
};
class CSalesman:virtual public CEmployee
{
public:
CSalesman(float salary=2000,float reward=0):CEmployee(salary)//只有创建对象时才用到
{
m_reward=reward;
}
float Salary()
{
m_salary=m_salary+m_reward*0.05;
return m_salary;
}
void SetData()
{
cout<<"CSaleman's reward is:";
cin>>m_reward;
sumOfReward+=m_reward;
}
void ShowWage()
{
cout<<"CSaleman's salary is"<<Salary()<<endl;
}
~CSalesman(){}
protected:
float m_reward;
public:
static float sumOfReward;
static float GetSumOfReward()//静态数据成员函数直接在类内定义
{
return sumOfReward;
}
};
float CSalesman::sumOfReward=0;//不写static当类的静态数据成员在类外定义时不写static
class CDeskman:virtual public CEmployee
{
public:
CDeskman(float salary=2000,int rateOfAppear=0):CEmployee(salary)
{
m_rateOfAppear=rateOfAppear;
}
void ShowWage()//const 函数只能调用const的函数
{
cout<<"CDeskman's salary is"<<Salary()<<endl;
}
double Salary()
{
m_salary=m_salary+((m_rateOfAppear-m_rateOfAppear%8)/8)*100;
return m_salary;
}
~CDeskman(){}
void SetData()
{
cout<<"CDeskman's rateOfAppear is:";
cin>>m_rateOfAppear;
}
protected:
int m_rateOfAppear;
};
class CBuyer:virtual public CEmployee
{
public:
CBuyer(float salary=2000,float reducedBuyReward=0):CEmployee(salary),m_reducedBuyReward((int)reducedBuyReward)
{
;
}
~CBuyer(){}
float Salary()
{
m_reducedBuyReward=(m_reducedBuyReward-m_reducedBuyReward%100)/100;
m_salary=m_salary+m_reducedBuyReward*10;
return m_salary;
}
void SetData()
{
cout<<"CBuyer's reducedBuyReward is:";
cin>>m_reducedBuyReward;
sumOfReducedBuyReward+=m_reducedBuyReward;
}
void ShowWage()
{
cout<<"CBuyer's salary is"<<Salary()<<endl;//pow函数
}
protected:
int m_reducedBuyReward;
public:
static int sumOfReducedBuyReward;
static int GetSumOfReducedBuyReward()//静态数据成员函数直接在类内定义
{
return sumOfReducedBuyReward;
}
};
int CBuyer::sumOfReducedBuyReward=0;
class CManager:virtual public CSalesman,virtual public CDeskman,virtual public CBuyer
{
public:
CManager(float salary=2000,float reward=0,int rateOfAppear=0,float reducedBuyReward=0):CSalesman(salary,reward),CDeskman(salary,rateOfAppear),CBuyer(salary,reducedBuyReward)
{
;
}
~CManager(){};
float Salary()
{
m_reward=m_reward*0.05+CBuyer::Salary()-2000;
m_salary=2000;
cout<<"reward"<<m_reward<<endl;
//cout<<"SumOfReward:"<<CSalesman::GetSumOfReward()<<endl;
//cout<<"SumOfReducedBuyReward"<<CBuyer::GetSumOfReducedBuyReward()<<endl;
m_salary=m_reward+CDeskman::Salary()+0.008*CSalesman::GetSumOfReward()+0.015*CBuyer::GetSumOfReducedBuyReward();
cout<<"salary"<<m_salary<<endl;
return m_salary;
}
void ShowWage()
{
cout<<"Manager's salary is:"<<Salary()<<endl;
}
void SetData()
{
cout<<"Manager's reward is:";
cin>>m_reward;
cout<<"Manager's rateOfAppear is:";
cin>>m_rateOfAppear;
cout<<"Manager's reducedBuyReward is:";
cin>>m_reducedBuyReward;
}
};
#endif
#include "sclass4_4_CEmployee.h"
char determination()
{
char c;
while(c=cin.get())
{
if(isalpha(c))
break;
}
return c;
}
void main()
{
cout<<"if input the data of salesman, please input y or Y."<<endl;
cout<<"if input the data of salesman:";
char a;
a=determination();
CSalesman salesman;
while(a=='Y'||a=='y')
{
salesman.SetData();
cout<<"if input the data of salesman:";
a=determination();
}
cout<<"Sum of reward is:"<<CSalesman::GetSumOfReward()<<endl;
cout<<"if input the data of buyer, please input y or Y."<<endl;
cout<<"if input the data of buyer?";
a=determination();
while(a=='Y'||a=='y')
{
CBuyer buyer;
buyer.SetData();
cout<<"if input the data of buyer?";
a=determination();
}
cout<<"Sum of reducedBuyReward:"<<CBuyer::GetSumOfReducedBuyReward()<<endl;
CManager manager;
manager.SetData();
manager.ShowWage();
}
4_5
#include "sclass4_5_CPerson.h"
void CPerson::Show()const
{
cout<<"age:"<<m_age<<" name:"<<m_name<<" address:"<<m_address<<endl;
}
void CStudent::Show()const
{
cout<<"age:"<<m_age<<" name:"<<m_name<<" address:"<<m_address<<" grade:"<<m_grade<<endl;
}
#ifndef _SCLASS4_5_CPERSON_H_
#define _SCLASS4_5_CPERSON_H_
#include <iostream>
#include <string>
using namespace std;
class CPerson
{
public:
CPerson(int age,string name,string address):m_age(age),m_name(name)
{
m_address=new string(address);//m_address是string类的指针,m_address本身是一个指针地址,要用cout显示它的内容则用*m_address
cout<<"address:"<<*m_address<<endl;
}
virtual ~CPerson()
{
delete m_address;
cout<<"~CPerson"<<endl;
}
virtual void Show()const;//虚函数在声明时候不需要加上virtual
protected:
string m_name;
int m_age;
string *m_address;
};
class CStudent:virtual public CPerson
{
public:
CStudent(int age,string name,string address,string grade):CPerson(age,name,address),m_grade(grade)
{
;
}
~CStudent()
{
cout<<"~CStudent"<<endl;
}
void Show()const;
private:
string m_grade;
};
#endif
#include "sclass4_5_CPerson.h"
void main()
{
CPerson *p=new CStudent(19,"zhang_san","SiChuan_University","grade_one");//创建一个CStudent的动态对象
if(NULL==p)
{
exit(0);//参数0表示非正常退出程序
}
p->Show();
delete p;
}