<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是用来计算字符串的长度,不是类型占内存的大小;
第二个程序的优点是?