gpt4 book ai didi

c - c中的多级继承

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:00 25 4
gpt4 key购买 nike

像这样在纯C中做继承的时候

typedef struct {
char name[NAMESIZE];
char sex;
} Person;

typedef struct {
Person person;
char job[JOBSIZE];
} Employee;

typedef struct {
Person person;
char booktitle[TITLESIZE];
} LiteraryCharacter;

我知道可以将“LiteraryCharacter”类型的实例强制转换为类型“Person”,并按原样使用它。但是,将“LiteraryCharacter”类型的实例转换为类型“Employee”并照此使用它是否也可以/安全?

最佳答案

这样的转换在标准 C 中是未定义的行为,尽管它适用于许多编译器。

即使它可以在您当前使用的编译器上运行,请注意它可能会在未来版本的编译器或不同的编译器中中断。 C 标准允许编译器假设指向不同类型的指针不指向相同的内存 - 除了一些有据可查的异常,其中包括将 LiteraryCharacter * 转换为 Person *。将 LiteraryCharacter * 转换为 Employee * 的代码可以而且将会在利用此假设生成高效代码的编译器下中断。

首先解释一下为什么您认为需要此转换可能是个好主意。它的等价物在 C++ 中是完全不正确的,并在 Java 中生成 ClassCastException。毕竟,LiteraryCharacter 没有Person 的字段,例如job

关于c - c中的多级继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22389474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com