kbhao7788 2017-03-10 08:06 采纳率: 0%
浏览 1058
已采纳

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却相等呢?????????????

  • 写回答

2条回答 默认 最新

  • Tiger_Zhao 2017-03-10 09:31
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动