c++ 虚基类问题怎么解决啊

struct student
{
int number;
char name[10];
};
struct MyStruct
{
CList so;
};
struct MyS:public MyStruct
{

 void print()
 {
     student os;
     os = { 10, "hao" };
     so.AddHead(os);
 }

};
struct myd :public MyStruct
{
void print2()
{
student os;
os = { 10, "ha" };
so.AddHead(os);
}
};
struct MyStr:public MyS,public myd
{

};
int main()
{
MyStr sp;

sp.print();
sp.print2();

}
为什么print()和print2()里面的&so不同

struct student
{
int number;
char name[10];
};
struct MyStruct
{
CList so;
};
struct MyS:virtual public MyStruct
{

 void print()
 {
     student os;
     os = { 10, "hao" };
     so.AddHead(os);
 }

};
struct myd :virtual public MyStruct
{
void print2()
{
student os;
os = { 10, "ha" };
so.AddHead(os);
}
};
struct MyStr:public MyS,public myd
{

};
int main()
{
MyStr sp;

sp.print();
sp.print2();

}

为什么这两print()和print2()里面的&so却相等呢?????????????

首先:&so取的是变量所在地址相对this指针的偏移量。
单纯的多重继承,调用的函数属于不同的基类,MyStructmydthis不同,算出来的偏移不同。
使用基虚类时,函数直接属于类MyStr,同一个this,算出来的偏移就一样了。

http://www.cnblogs.com/yiranlaobaitu/p/3764422.html