作业5.19

<span style="color:#66ff99;"></span> 
#include <iostream>
#include <string>
using namespace std;
class base
{
public:
	base(string name1,int age1)
	{
		name=name1;
		age=age1;
	}
	void showdata()
	{
		cout<<"相关信息如下:"<<endl;
		cout<<"姓名:"<<name<<"年龄"<<age<<endl;
	}
protected:
	string name;
	int age;
};
class leader:virtual public base
{
public:
	leader(string name1,int age1,string position1,string department1):base( name1,age1)
	{
		position=position1;
		department=department1;
	}
	void showdata()
	{
		base::showdata();
		cout<<"相关信息如下:"<<endl;
		cout<<"职务:"<<position<<"部门"<<department<<endl;
	}
protected:
	string position;
	string department;
};
class engineer:virtual public base
{
public:
	engineer(string name1,int age1,string title1,string major1):base(name1,age1)
	{
		title=title1;
		major=major1;
	}
	void showdata()
	{
		base::showdata();
		cout<<"相关信息如下:"<<endl;
		cout<<"职称:"<<title<<"专业"<<major<<endl;
	}
protected:
	string title;
	string major;
};
class chairman:public leader,public engineer
{
public:
	chairman(string name1,int age1,string position1,string department1,string title1,string major1,int ID1):
	  base( name1,age1),leader( name1,age1,position1,department1),engineer( name1,age1,title1,major1)
	  {
		  ID=ID1;
	  }
	  void showdata()
	  {
		  leader::showdata();
		  engineer::showdata();
		  cout<<"编号"<<ID<<endl;
	  }
protected:
	int ID;
};
int main()
{
	leader lea("林某某",20,"经理","人事部");
		cout<<"领导:"<<endl;
	lea.showdata();
	engineer eg("庄某某",19,"工程师","建筑系");
	cout<<"工程师:"<<endl;
		eg.showdata();
	chairman cha("赵某某",18,"总经理","策划部","工程师","工商管理",001);
	cout<<"主任工程师:"<<endl;
	cha.showdata();
	return 0;
}

	

虚基类.

在继承中产生歧义的原因有可能是继承类继承了基类多次,从而产生了多个拷贝,即不止一次的通过 多个路径继承类在内存中创建了基类成员的多份拷贝。虚基类的基本原则是在内存中只有基类成员的一份拷贝。这样,通过把基类继承声明为虚拟的,就只能继承基 类的一份拷贝,从而消除歧义。用virtual限定符把基类继承说明为虚拟

网页答案:

<span style="font-size:12px;">#include<iostream.h> 
  #include<string.h> 
  class base // 基类 
  { 
  char* name;// 姓名 
  int age; // 年龄 
  public: 
  base(){} 
  void setname(char na[]) 
  { 
  name=new char[strlen(na)+1]; 
  strcpy(name,na); 
  } 
  void setage(int a) 
  { 
  age=a; 
  } 
  char* getname() { return name; } 
  int getage() { return age; } 
  }; 
  class leader:virtual public base // 领导类 
  { 
  char *job;//职务 
  char *dep;//部门 
  public: 
  leader() { } 
  void setjob(char jb[]) 
  { 
  job=new char[strlen(jb)+1]; 
  strcpy (job, jb); 
  } 
  void setdep(char dp[]) 
  { 
  dep=new char [strlen (dp) +1] ; 
  strcpy (dep, dp); 
  } 
  char *getjob() { return job; } 
  char *getdep() { return dep; } 
  }; 
  class engineer:virtual public base // 工程师类 
  { 
  char *major; // 专业 
  char *prof; // 职称 
  public: 
  engineer () { } 
  void setmajor(char maj []) 
  { 
  major=new char[strlen(maj)+1]; 
  strcpy (major,maj); 
  } 
  void setprof(char pf[]) 
  { 
  prof=new char[strlen(pf)+1]; 
  strcpy (prof, pf); 
  } 
  char*getmajor() {return major; } 
  char*getprof() {return prof; } 
  } ; 
  class chairman:public leader,public engineer // 主任工程师类 
  { } ; 
  void main() 
  { 
  chairman c; 
  c.setname("李明"); 
  c.setage(42); 
  c.setjob("处长"); 
  c.setdep("设计处"); 
  c.setmajor("电站锅炉设计"); 
  c.setprof("高级工程师"); 
  cout<< "输出结果:"<<endl; 
  cout << " " << c.getname() << ",年龄" << c.getage()<<"岁,担任" <<c.getdep() <<c.getjob() <<","<<endl; 
  cout << " " << c.getprof() << ",从事" << c.getmajor()<< "专业" << "。 " << endl; 
  } 
</span><strong>  
</strong>


strlen是用来计算字符串的长度,不是类型占内存的大小;

第二个程序的优点是?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值