我们有两个结构Base
和Deriv
。 Deriv继承自Base
结构。在以下代码中我们有:
Deriv *dp = new Deriv;
Base *bp = (Base*)dp;
Base指针和Deriv指针都保持相同的地址。该计划的输出是:
A 10
现在假设我们在派生类中评论Base inherit;
输出将成为:
A 20
我不明白为什么我们必须在派生类中添加Base inherit;
才能使多态运行。
#include <iostream>
using namespace std;
struct Base{
int A;
char name[5];
};
struct Deriv {
Base inherit;
int B;
};
int main()
{
Deriv *dp = new Deriv;
Base *bp = (Base*)dp;
bp->A = 10;
dp->B = 20;
cout <<"A" << ((Base *)dp)->A << endl;
return 0;
}
答案 0 :(得分:1)
这可能是实现继承的C方法,这很好,但是如果你使用的是C ++,除非你真的知道你在做什么,否则我认为没有意义。
修改强>
Deriv
基本上构造为
struct Deriv
{
int A;
char name[5];
int B;
};
即使Base
指针指向此结构,事情仍然正常。
但如果删除Base inherit
,Deriv
现在只是
struct Deriv
{
int B;
};
现在当Base
指针ptr
指向此结构时,ptr->A
将是B
的字段Deriv
,而ptr->name
将{{1}}超出范围并可能导致未定义的行为。