#include <iostream>
#include <string>
using namespace std;
#pragma pack (1) /*指定按1字节对齐*/
//定义公共基类Person
class Person
{
public:
Person(char *nam="liqiang",char s='m',int a=0) //构造函数
{
strcpy(name,nam);
sex=s;
age=a;
}
protected: //保护成员
char name[20];
char sex;
int age;
};
//定义类Teacher
class Teacher:virtual public Person //声明Person为公用继承的虚基类
{
public:
Teacher(char *nam="liqiang",char s='m',int a=0,char *t="Professor"):Person(nam,s,a) //构造函数
{
strcpy(title,t);
}
protected: //保护成员
char title[10]; //职称
};
//定义类Student
class Student:virtual public Person //声明Person为公用继承的虚基类
{
public:
Student(char *nam="liqiang",char s='m',int a=0,float sco=0): //构造函数
Person(nam,s,a),score(sco) //初始化表
{
}
protected: //保护成员
float score; //成绩
};
//定义多重继承的派生类Graduate
class Graduate:public Teacher,public Student //声明Teacher和Student类为公用继承的直接基类
{
public:
Graduate(char *nam="liqiang",char s='m',int a=0,char *t="Professor",float sco=0,float w=0): //构造函数
Person(nam,s,a),Teacher(nam,s,a,t),Student(nam,s,a,sco),wage(w) //初始化表
{
}
void show() //输出研究生的有关数据
{
cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<"title:"<<title<<endl;
cout<<"wages:"<<wage<<endl;
}
private:
float wage; //工资
};
int main()
{
// Graduate grad1("Wang-li",'f',24,"assistant",89.5,1234.5);
// grad1.show();
Person p1;
Teacher t1;
Student s1;
Graduate g1;
cout<<"sizeof(Person)="<<sizeof(Person)<<endl;
cout<<"sizeof(Teacher)="<<sizeof(Teacher)<<endl;
cout<<"sizeof(Student)="<<sizeof(Student)<<endl;
cout<<"sizeof(Graduate)="<<sizeof(Graduate)<<endl;
return 0;
}
请问此处sizeof(Teacher)为什么不是35=25+10呢?
sizeof(Graduate)为什么不是43=25+10+4+4呢?