//类的继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CEmployee
{
public:
int m_ID; //定义员工ID
char m_Name[MAXLEN];
char m_Depart[MAXLEN];
CEmployee()
{
memset(m_Name,0,MAXLEN); // 初始化
memset(m_Depart,0,MAXLEN);
cout<<"员工类构造函数被调用"<<endl;
}
void OutputName() //定义公有方法
{
cout<<"员工姓名:"<<m_Name<<endl;
}
};
class COperator:public CEmployee //定义操作员类,从CEmployee派生出来的
{
public:
char m_Password[MAXLEN];
bool Login()
{
if (strcmp(m_Name,"MR")==0 && strcmp(m_Password,"KJ")
==0)
{
cout<<"登录成功"<<endl;
return true;
}
else
{
cout<<"登录失败"<<endl;
return false;
}
}
};
int main()
{
COperator optr; //定义类对象
strcpy(optr.m_Name,"MR");
strcpy(optr.m_Password,"KJ");
optr.Login();
optr.OutputName();
return 0;
}
========
//类的继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CEmployee
{
public:
int m_ID; //定义员工ID
char m_Name[MAXLEN];
char m_Depart[MAXLEN];
CEmployee()
{
memset(m_Name,0,MAXLEN); // 初始化
memset(m_Depart,0,MAXLEN);
cout<<"员工类构造函数被调用"<<endl;
}
void OutputName() //定义公有方法
{
cout<<"员工姓名:"<<m_Name<<endl;
}
};
class COperator:public CEmployee //定义操作员类,从CEmployee派生出来的
{
public:
char m_Password[MAXLEN];
void OutputName() //子类方法优先
{
cout<<"子类员工姓名:"<<m_Name<<endl;
}
bool Login()
{
if (strcmp(m_Name,"MR")==0 && strcmp(m_Password,"KJ")
==0)
{
cout<<"登录成功"<<endl;
return true;
}
else
{
cout<<"登录失败"<<endl;
return false;
}
}
};
int main()
{
COperator optr; //定义类对象
strcpy(optr.m_Name,"MR");
strcpy(optr.m_Password,"KJ");
optr.Login();
optr.OutputName(); //调用了子类的方法
return 0;
}
========
//类的继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CEmployee
{
public:
int m_ID; //定义员工ID
char m_Name[MAXLEN];
char m_Depart[MAXLEN];
CEmployee()
{
memset(m_Name,0,MAXLEN); // 初始化
memset(m_Depart,0,MAXLEN);
cout<<"员工类构造函数被调用"<<endl;
}
void OutputName() //定义公有方法
{
cout<<"员工姓名:"<<m_Name<<endl;
}
};
class COperator:public CEmployee //定义操作员类,从CEmployee派生出来的
{
public:
char m_Password[MAXLEN];
void OutputName() //子类方法优先
{
cout<<"子类员工姓名:"<<m_Name<<endl;
}
bool Login()
{
if (strcmp(m_Name,"MR")==0 && strcmp(m_Password,"KJ")
==0)
{
cout<<"登录成功"<<endl;
return true;
}
else
{
cout<<"登录失败"<<endl;
return false;
}
}
};
int main()
{
COperator optr; //定义类对象
strcpy(optr.m_Name,"MR");
strcpy(optr.m_Password,"KJ");
optr.Login();
optr.CEmployee::OutputName(); //调用了显示父类的方法
return 0;
}
========
//类的继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CEmployee
{
public:
int m_ID; //定义员工ID
char m_Name[MAXLEN];
char m_Depart[MAXLEN];
CEmployee()
{
memset(m_Name,0,MAXLEN); // 初始化
memset(m_Depart,0,MAXLEN);
cout<<"员工类构造函数被调用"<<endl;
}
void OutputName() //定义公有方法
{
cout<<"员工姓名:"<<m_Name<<endl;
}
void OutputName(const char* pchData) //定义公有方法
{
if(pchData!=NULL)
{
strcmp(m_Name,pchData);
cout<<"设置并输出员工姓名:"<<pchData<<endl;
}
}
};
class COperator:public CEmployee //定义操作员类,从CEmployee派生出来的
{
public:
char m_Password[MAXLEN];
void OutputName() //子类方法优先
{
cout<<"子类员工姓名:"<<m_Name<<endl;
}
bool Login()
{
if (strcmp(m_Name,"MR")==0 && strcmp(m_Password,"KJ")
==0)
{
cout<<"登录成功"<<endl;
return true;
}
else
{
cout<<"登录失败"<<endl;
return false;
}
}
};
int main()
{
COperator optr; //定义类对象
strcpy(optr.m_Name,"MR");
strcpy(optr.m_Password,"KJ");
optr.Login();
// optr:OutputName("MR"); //error,因为子类优先,覆盖所有
父类的重载
optr.CEmployee::OutputName("MR");
return 0;
}
========
//利用虚方法实现动态绑定
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CEmployee
{
public:
int m_ID; //定义员工ID
char m_Name[MAXLEN];
char m_Depart[MAXLEN];
CEmployee()
{
memset(m_Name,0,MAXLEN); // 初始化
memset(m_Depart,0,MAXLEN);
cout<<"父员工类构造函数被调用"<<endl;
}
virtual void OutputName() //定义了虚函数
{
cout<<"父类员工姓名:"<<m_Name<<endl;
}
OutputName(const char* pchData) //定义公有方法
{
if(pchData!=NULL)
{
strcmp(m_Name,pchData);
cout<<"设置并输出子员工姓名:"<<pchData<<endl;
}
}
};
class COperator:public CEmployee //定义操作员类,从CEmployee派生出来的
{
public:
char m_Password[MAXLEN];
void OutputName() //子类方法优先
{
cout<<"子类员工姓名:"<<m_Name<<endl;
}
bool Login()
{
if (strcmp(m_Name,"MR")==0 && strcmp(m_Password,"KJ")
==0)
{
cout<<"登录成功"<<endl;
return true;
}
else
{
cout<<"登录失败"<<endl;
return false;
}
}
};
int main()
{
CEmployee *pWorker=new COperator();
strcpy(pWorker->m_Name,"MR");
pWorker->OutputName(); //执行了子类员工的姓名
delete pWorker;
return 0;
}
=======
//利用虚方法实现动态绑定
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CEmployee
{
public:
int m_ID; //定义员工ID
char m_Name[MAXLEN];
char m_Depart[MAXLEN];
CEmployee()
{
memset(m_Name,0,MAXLEN); // 初始化
memset(m_Depart,0,MAXLEN);
cout<<"父员工类构造函数被调用"<<endl;
}
virtual void OutputName() //定义了虚函数
{
cout<<"父类员工姓名:"<<m_Name<<endl;
}
OutputName(const char* pchData) //定义公有方法
{
if(pchData!=NULL)
{
strcmp(m_Name,pchData);
cout<<"设置并输出子员工姓名:"<<pchData<<endl;
}
}
};
class COperator:public CEmployee //定义操作员类,从CEmployee派生出来的
{
public:
char m_Password[MAXLEN];
void OutputName() //子类方法优先
{
cout<<"子类员工姓名:"<<m_Name<<endl;
}
bool Login()
{
if (strcmp(m_Name,"MR")==0 && strcmp(m_Password,"KJ")
==0)
{
cout<<"登录成功"<<endl;
return true;
}
else
{
cout<<"登录失败"<<endl;
return false;
}
}
};
class CSystemManager:public CEmployee
{
public:
char m_Password[MAXLEN];
void OutputName()
{
cout<<"系统管理员姓名:"<<m_Name<<endl;
}
CSystemManager()
{
strcpy(m_Name,"SK");
}
};
int main()
{
CEmployee *pWorker;
pWorker=new COperator();
pWorker->OutputName();
delete pWorker;
pWorker=NULL;
pWorker=new CSystemManager();
pWorker->OutputName();
delete pWorker;
pWorker=NULL;
return 0;
}
========
//子类对象的创建和释放过程,先父构,子构,子析构,父析构
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CEmployee
{
public:
int m_ID; //定义员工ID
char m_Name[MAXLEN];
char m_Depart[MAXLEN];
CEmployee()
{
cout<<"父员工类构造函数被调用"<<endl;
}
~CEmployee()
{
cout<<"父员工类析构函数被调用"<<endl;
}
};
class COperator:public CEmployee //定义操作员类,从CEmployee派生出来的
{
public:
char m_Password[MAXLEN];
COperator()
{
strcpy(m_Name,"MR"); //设置数据成员
cout<<"COperator类构造函数被调用"<<endl;
}
~COperator()
{
cout<<"COperator类析构函数被调用"<<endl;
}
};
int main()
{
COperator optr;
return 0;
}
========
//析构函数通常都是虚函数
//实现多继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class bird
{
public:
void FlyBird()
{
cout<<"鸟能飞起来"<<endl;
}
void breath()
{
cout<<"鸟能呼吸"<<endl;
}
};
class fish
{
public:
void SwimFish()
{
cout<<"鱼能在水里游"<<endl;
}
void breath()
{
cout<<"鱼能呼吸"<<endl;
}
};
class flyfish:public bird, public fish
{
public:
void Action()
{
cout<<"鱼鸟能飞又能游"<<endl;
}
};
void main()
{
flyfish ff;
ff.FlyBird();
ff.SwimFish();
ff.Action();
//ff.breath(); 错误,因为各有breath
ff.fish::breath();
ff.bird::breath();
}
=======
//虚继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CAnimal
{
public:
CAnimal()
{
cout<<"动物类被构造"<<endl;
}
void Move()
{
cout<<"动物能移动"<<endl;
}
};
class CBird:virtual public CAnimal
{
public:
CBird()
{
cout<<"鸟类被构造"<<endl;
}
void FlyBird()
{
cout<<"鸟能飞起来"<<endl;
}
void Breath()
{
cout<<"鸟能呼吸"<<endl;
}
};
class CFish:virtual public CAnimal
{
public:
CFish()
{
cout<<"鱼类被构造"<<endl;
}
void SwimFish()
{
cout<<"鱼能在水里游"<<endl;
}
void Breath()
{
cout<<"鱼能呼吸"<<endl;
}
};
class CWaterBird:public CBird, public CFish
{
public:
CWaterBird()
{
cout<<"水鸟被构造"<<endl;
}
void Action()
{
cout<<"鱼鸟能飞又能游"<<endl;
}
};
void main()
{
CWaterBird wb;
}
//动物类被构造一次,因为虚继承
=======
//虚继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CAnimal
{
public:
CAnimal()
{
cout<<"动物类被构造"<<endl;
}
void Move()
{
cout<<"动物能移动"<<endl;
}
};
class CBird:public CAnimal
{
public:
CBird()
{
cout<<"鸟类被构造"<<endl;
}
void FlyBird()
{
cout<<"鸟能飞起来"<<endl;
}
void Breath()
{
cout<<"鸟能呼吸"<<endl;
}
};
class CFish:public CAnimal
{
public:
CFish()
{
cout<<"鱼类被构造"<<endl;
}
void SwimFish()
{
cout<<"鱼能在水里游"<<endl;
}
void Breath()
{
cout<<"鱼能呼吸"<<endl;
}
};
class CWaterBird:public CBird, public CFish
{
public:
CWaterBird()
{
cout<<"水鸟被构造"<<endl;
}
void Action()
{
cout<<"鱼鸟能飞又能游"<<endl;
}
};
void main()
{
CWaterBird wb;
}
//动物类被构造两次
=====
//析构过程也是如此
//虚继承
#define MAXLEN 128
#i nclude <iostream>
#i nclude <iomanip>
#i nclude <string>
using namespace std;
class CAnimal
{
public:
CAnimal()
{
cout<<"动物类被构造"<<endl;
}
~CAnimal()
{
cout<<"动物类被析构"<<endl;
}
void Move()
{
cout<<"动物能移动"<<endl;
}
};
class CBird:virtual public CAnimal
{
public:
CBird()
{
cout<<"鸟类被构造"<<endl;
}
~CBird()
{
cout<<"鸟类被析构"<<endl;
}
void FlyBird()
{
cout<<"鸟能飞起来"<<endl;
}
void Breath()
{
cout<<"鸟能呼吸"<<endl;
}
};
class CFish:virtual public CAnimal
{
public:
CFish()
{
cout<<"鱼类被构造"<<endl;
}
~CFish()
{
cout<<"鱼类被析构"<<endl;
}
void SwimFish()
{
cout<<"鱼能在水里游"<<endl;
}
void Breath()
{
cout<<"鱼能呼吸"<<endl;
}
};
class CWaterBird:public CBird, public CFish
{
public:
CWaterBird()
{
cout<<"水鸟被构造"<<endl;
}
~CWaterBird()
{
cout<<"水鸟被析构"<<endl;
}
void Action()
{
cout<<"鱼鸟能飞又能游"<<endl;
}
};
void main()
{
CWaterBird wb;
}
--------------