载入中。。。 'S bLog
 
载入中。。。
 
载入中。。。
载入中。。。
载入中。。。
载入中。。。
载入中。。。
 
填写您的邮件地址,订阅我们的精彩内容:


 
VC++学习笔记19-类的继承
[ 2010/8/14 16:02:00 | By: 梦翔儿 ]
 

//类的继承
#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;

}
--------------

 
 
发表评论:
载入中。。。

 
 
 

梦翔儿网站 梦飞翔的地方 http://www.dreamflier.net
中华人民共和国信息产业部TCP/IP系统 备案序号:辽ICP备09000550号

Powered by Oblog.