C多态实现

作者: 霡霂976447044 | 来源:发表于2019-02-28 21:51 被阅读0次
#include <stdio.h>

typedef struct _object {
    char base;

} PyObject;

typedef struct {
    char base;
    int val;

} PyIntObject;

#if 0
typedef struct {
    int val;
    char base;

} PyIntObject;
#endif


void print_base(PyObject *obj) {
    printf("obj->base : %c\n", obj->base);
}

int main() {
    printf("sizeof(PyObject) : %ld\n", sizeof(PyObject)); // 1
    printf("sizeof(PyIntObject) : %ld\n", sizeof(PyIntObject)); // 8
    PyIntObject intObject = {'a', 999};
//    print_base(&intObject);  expected ‘PyObject * {aka struct _object *}’ but argument is of type ‘PyIntObject * {aka struct <anonymous> *}’
    print_base((PyObject *)&intObject);
    return 0;
}

output

sizeof(PyObject) : 1
sizeof(PyIntObject) : 8
obj->base : a

PyObject的结构体大小为1, 而PyIntObject为8,不同size的内存大小也是也可正确强制类型转化使用的。

void print_base(PyObject *obj) {
    printf("obj->base : %c\n", obj->base);
}

需要传进来一个PyObject类型的指针,调用的时候,

print_base((PyObject *)&intObject);

直接强制转换,当然,这样的前提是结构体的内存分配的前一部分必须要和父类一致,才能正确的调用。
如果改为

typedef struct {
    int val;
    char base;

} PyIntObject;

obj->base读取的内存就不是char base

相关文章

  • C多态实现

    output PyObject的结构体大小为1, 而PyIntObject为8,不同size的内存大小也是也可正确...

  • Java基础之面向对象

    1.多态,继承,封装 Java实现多态有哪些必要条件?具体怎么实现?多态的实现原理?多态的作用? 答:多态的优点 ...

  • 2018-01-25

    多态机制 java语言,实现多态...

  • 2.0 多态的实现

    本小节知识点: 【掌握】如何实现多态 【了解】多态的原理 【掌握】多态的注意点 1.如何实现多态 Animal是父...

  • jvm结构&运行机制&多态实现

    浅析Java虚拟机结构与机制 浅谈多态机制的意义及实现 多态:编译时多态(重载)、运行时多态(继承父类、实现接口)...

  • Java_basic_10: 多态polymorphism

    多态polymorphism 多态是指对象的多种形态 主要可以分为引用多态和方法多态 继承是多态的实现基础 引用多...

  • Golang learning 面向对象 多态

    通过interface 实现多态

  • 实现golang语言的多态

    如何实现golang语言的多态? C++里面有多态是其三大特性之一,那么golang里面的多态我们该怎么实现? g...

  • Swift 多态实现探究

    多态 父类指针指向子类对象 Swift 中多态的实现类似于 c++ 中的虚表 OC 多态实现利用的是 Runtim...

  • 如果你还不理解多态,不妨看看我的

    多态(Objective-C) 一、多态的概念 场景1: 多态:在程序员的世界,多态就是相同的方法,不同的实现。 ...

网友评论

    本文标题:C多态实现

    本文链接:https://www.haomeiwen.com/subject/ktrluqtx.html