关于C++多态性的问题

2025-01-03 08:36:50
推荐回答(4个)
回答1:

你应该把main里的:
someone->name = name;
改为
((Beauty)someone)->name = name;
因为你用的是Person指针,Person *someone;
你若不注释掉Beauty里的name,
someone->name会指向Person的name,而不是Beauty里的name,
因为你的Beauty里先是继承了Person的name,它的真实名字可能是name@hash1
而你Beauty里又有个name,它的真实名字是name@hash2
则你使用someone->name的时候实际是使用someone->name@hash1,这是编译器选择的....
而Beauty里Introduction使用的name是name@hash2,所以你会遇到这状况...

回答2:

Beauty 中的name不存在时,会继承person的,当他存在时,就使用自己的name了,所以不会显示cc

回答3:

如果不注释的话,这个子结构体的name会覆盖掉父结构体的name,而子结构体终的name没有初始化,可能默认值为空值,所以没有打印出来,你检查一下是不是这样

回答4:

我以java角度来回答这个问题:
你有赋值的name是 Beauty对象,当你把指针someone重新指向Introduction()对象时,并没有为Introduction对象中的name赋值,所以,会出现上面这种情况。