面向C语言编程|数据类型“多态”

本文介绍如何利用C语言的union特性实现数据类型的多态性。通过一个具体实例展示了同一union变量如何根据不同上下文表现出不同数据类型的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态是面向对象编程中的一个概念,表示一个对象,比如一个接口,在不同的情况下,有不同的表现形式。比如,对于人这个对象,其都会有吃饭,这个接口。但是对于不同的”人,其吃饭所用的工具可能不尽相同,比如,中国人通常用筷子吃,外国人通常用的是刀叉,当然,对于中国小孩,也可能用的是勺子,😃 。

C语言中基本数据类型,含义十分的明确,32bit系统来说,char就是一个字节,short就是两个字节,int和long也有类似的定义。那么,如何用C语言实现,同一个数据类型表达多个含义呢?我们其实可以使用union来实现,一定程度上的数据类型多态

废话不多说,上代码:

typedef union vals{
    char c;
    short s;
    int   i;
    float f;
    long  v;
}vals_t;

vals_t是一个union,他有多大呢?64bit系统下,8个字节,即,union中最大的数据类型的大小,这里是float。

那它怎么实现了多态性呢?我们修改一下代码:

//gcc 7.4.0

#include  <stdio.h>

typedef union vals{
    char c;
    short s;
    int   i;
    float f;
    long  v;
}vals_t;

typedef struct  {
    vals_t vt;
}mul_type_t;

int main(void)
{
    mul_type_t mt;
    
    /*char*/
    mt.vt.v = 'N';
    
    printf("mt.vt.c = %c\n", mt.vt.c);
    
    /*short*/
    mt.vt.v= 0x1234;
    printf("mt.vt.s = 0x%x\n", mt.vt.s);
    
    /*int*/
    mt.vt.v = 0x12345678;
    printf("mt.vt.i = 0x%x\n", mt.vt.i);
    
    /*float*/
    mt.vt.v = 0x414570A3;
    printf("mt.vt.f = %.3f\n", mt.vt.f);
    
    return 0;
}

输出:

mt.vt.c = N
mt.vt.s = 0x1234
mt.vt.i = 0x12345678
mt.vt.f = 12.340

mul_type_t是一个复合数据类型,我们分别对其赋值为char(‘N’)、short(0x1234)、int(0x12345678)、float(0x414570A3),然后,我们分别以对应的数据类型进行了打印,可以看到,对于同一个数据类型,mt,在不同的打印情况下,其表达了不同的数据类型,这就是C语言数据类型的多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值