📄 xuyan.cpp
字号:
//create.h
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
class String//创建一个string类用来拷贝字符串,拷贝构造函数,对象赋值。
{
public:
String():buf(0),length(0){}
String(const char *s);
//~String(){}
//copy constructor
String(const String &other);
//Assignment operator
String &operator=(const String &other);
void Display()const{cout<<buf;}
private:
int length;
char *buf;
};
//family.h
enum familyClasses{GENERAL,LULL,ENRICH};
const String gClassName[]={"General","Lull","Enrich"};
enum familyNation{CHINA,AMERICAN,INDIAN};
const String gNationName[]={"China","American","Indian"};
class Condition//创建一个condition类,其成员是公有的,三个家庭都具有的条件
{
public:
double chattel;
int income;
int outgiving;
int houseSize;
int floor;
public:
Condition(){}
~Condition(){}
//return a const pointer to a Condition object
const Condition *GetCondi(){return this;}
void SetCondi(double c,int i,int o,int h,int f)
{chattel=c;
income=i;
outgiving=o;
houseSize=h;
floor=f;}
};
class level//创建一个基类,是个抽象类,将不同的家庭情况赋值
{private:
int familyClass,familyNation;
class String className,nationName;
class String name;
class String nation;
class String furniture;
class String electronic;
class String advanced;
Condition FamilyCondi;
static int count;
public:
level(){InCount();}
~level(){DecCount();}
static void PrintTitle()
{cout<<"****************************************************************\n"<<endl;
cout<<" WELCOME TO SEE THIS LIST\n"<<endl;
cout<<" This is list show about some family of different\n"<<endl;
cout<<"nation and life level,you can write down your life condition."<<endl;
cout<<"****************************************************************\n"<<endl;}
static int GetCount(){return count;}
static void InCount(){count++;}
static void DecCount(){count--;}
static void PrintCount();
void SetFamilyClass(int fc){familyClass=fc;SetClassStr(fc);}
void SetClassStr(int fc){className=gClassName[fc];}
void SetFamilyNation(int fn){familyNation=fn;SetClassStr(fn);}
void SetNationStr(int fn){nationName=gNationName[fn];}
int GetFamilyClass(){return familyClass;}
String GetClassName(){return className;}
int GetFamilyNation(){return familyNation;}
String GetNationName(){return nationName;}
void SetName(String nm){name=nm;}
String GetName(){return name;}
void SetNation(String nt){nation=nt;}
String GetNation(){return nation;}
void SetFurniture(String fne){furniture=fne;}
String GetFurniture(){return furniture;}
void SetElectronic(String elc){electronic=elc;}
String GetElectronic(){return electronic;}
void SetAdvanced(String adv){advanced=adv;}
String GetAdvanced(){return advanced;}
//intialize a Condition object
void SetCondi(double c,int i,int o,int h,int f){FamilyCondi.SetCondi
(c,i,o,h,f);}
//read contents of then familyCondi object
const Condition*GetCondi(){return (FamilyCondi.GetCondi());}
virtual void PrintEntry()=0;
void PrintCondi();
};
class Family: public level//是level的派生类,也是下面几个类的基类
{
public:
Family(int fn){SetFamilyNation(fn);}
void PrintEntry();//虚函数,输出家庭情况
};
class General:public Family//family的子类,是一个普通家庭的类
{
public:
General(int fn,String nm):Family(fn)
{SetFamilyNation(fn);
SetFamilyClass(GENERAL);
SetName(nm);}
void PrintEntry();
};
class Lull:public Family//family的子类,描述了小康家庭的情况
{
public:
Lull(int fn,String nm,String elc):Family(fn)
{SetFamilyNation(fn);
SetFamilyClass(LULL);
SetName(nm);
SetElectronic(elc);
}
Lull(int fn,String nm):Family(fn)
{SetFamilyNation(fn);
SetFamilyClass(LULL);
SetName(nm); }
void PrintEntry();
};
class Enrich:public Family//family的子类,描述了富裕家庭的状况
{
public:
Enrich(int fn,String nm,String elc):Family(fn)
{SetFamilyNation(fn);
SetFamilyClass(ENRICH);
SetName(nm);
SetElectronic(elc);
}
Enrich(int fn,String nm):Family(fn)
{SetFamilyNation(fn);
SetFamilyClass(ENRICH);
SetName(nm);
}
void PrintEntry();
};
//create.cpp
//constructor that take a parameter
String::String(const char *s)//拷贝字符串
{
length=strlen(s);
buf=new char[length+1];
strcpy(buf,s);
}
//copy constuctor
String::String(const String &other)//拷贝对象
{
length=other.length;
buf=new char[length+1];
strcpy(buf,other.buf);
}
String &String::operator=(const String &other)//用重载运算符给对象赋值
{
if(&other==this)
return *this;
length=other.length;
buf=new char[length+1];
strcpy(buf,other.buf);
return *this;
}
//family.cpp
int level::count=0;
void FatalError()
{
fprintf(stderr,"A fatal error error has occurred\n");
exit(1);
}
void level::PrintCount()
{
cout<<"\nNUMBER OF PLAYERS:"<<level::GetCount()<<"\n";
};
void level::PrintCondi()
{
const Condition*locCondi=GetCondi();
cout<<"\nChattel:"<<locCondi->chattel<<"\n";
cout<<"Income:"<<locCondi->income<<"\n";
cout<<"Outgiving:"<<locCondi->outgiving<<"\n";
cout<<"HouseSize:"<<locCondi->houseSize<<"\n";
cout<<"Floor:"<<locCondi->floor<<"\n";
}
void Family::PrintEntry()
{
// const Condition*locCondi=GetCondi();
cout<<"\nNAME:";
(this->GetName()).Display();
cout<<"\nNation:";
(this->GetNationName()).Display();
cout<<"\nClass:";
(this->GetClassName()).Display();
}
void General::PrintEntry()//输出普通家庭的情况
{
//const Condition*locCondi=GetCondi();
Family::PrintEntry();
cout<<"\nFurniture:";
(this->GetFurniture()).Display();
cout<<"\nElectronic:";
(this->GetElectronic()).Display();
PrintCondi();
}
void Lull::PrintEntry()//输出小康家庭的生活情况
{
//const Condition*locCondi=GetCondi();
Family::PrintEntry();
cout<<"Furniture:";
(this->GetFurniture()).Display();
cout<<"Electronic:";
(this->GetElectronic()).Display();
cout<<"Advanced:";
(this->GetAdvanced()).Display();
PrintCondi();
}
void Enrich::PrintEntry()//输出富裕家庭的情况
{
//const Condition*locCondi=GetCondi();
Family::PrintEntry();
cout<<"\nFurniture:";
(this->GetFurniture()).Display();
cout<<"\nElectronic:\n";
(this->GetElectronic()).Display();
cout<<"\nAdvanced:";
(this->GetAdvanced()).Display();
PrintCondi();
}
//main.cpp
int main()
{
Family*familyPtr[3];//定义一个基类的指针,给不同子类赋值
familyPtr[0]=new General(INDIAN,"Lilio");
familyPtr[0]->SetCondi(50000,1500,800,50,2);
familyPtr[0]->SetFurniture("chair,counter");
familyPtr[0]->SetElectronic("Radio");
familyPtr[1]=new Lull(CHINA,"LaoGao");
familyPtr[1]->SetCondi(100000,3000,1500,100,4);
familyPtr[1]->SetFurniture("sofa");
familyPtr[1]->SetElectronic("TV");
familyPtr[2]=new Enrich(AMERICAN,"Smiths","Radio and TV");
familyPtr[2]->SetCondi(2000000,5000,3000,300,6);
familyPtr[2]->SetFurniture("advanced soft");
familyPtr[2]->SetAdvanced("Garden car");
Family::PrintTitle();
level::PrintCount();
int n;
for(n=0;;n++)
{cout<<"if you want to know the condition of General family,please input 0:"<<endl;
cout<<"if you want to know the lull family'scondition ,input 1:"<<endl;
cout<<"or you want to know the Enrich family,input 2:"<<endl;
cout<<"if you want to quit ,input any key except 0-2:"<<endl;
cin>>n;
familyPtr[n]->PrintEntry(); }
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -