综述
多态性是面向对象程序设计的一个重要特征。函数
在C++语言中,多态指的是:具备不一样功能的函数能够用同一个函数名,能够用一个函数名调用不一样内容的函数。.net
C++的多态分为两种:设计
1. 静态多态性(编译时多态):在程序编译时系统就能决定调用的是哪一个函数,所以称为编译时多态性指针
2. 动态多态性:在程序运行过程当中才动态肯定操做指针指向的对象,又被称为运行时多态对象
C++实现多态能够用虚函数,抽象类,覆盖以及模板实现blog
C语言是面向过程的语言,但一样能够实现多态性,能够经过宏实现编译时多态,用函数指针实现动态多态element
C语言用宏实现编译时多态
例如如下例子是用宏实现双向链表的一部分it
#include <stdio.h>
#include <stdlib.h>
#define INIT_LIST_TYPE(type) \
typedef struct list_element_##type { \
struct list_element_##type* next, *pre; \
void* val; \
} list_element_##type; \
typedef struct list_head_##type { \
list_element_##type* elem, *last; \
int length; \
} list_head_##type;
#define list_element(type) \
list_element_##type
#define list_head(type) \
list_head_##type
#define LIST_FUNC_DECLARE(type) \
list_head_##type* init_list_##type();
#define LIST_FUNC_INIT(type) \
_init_list(type)
#define init_list(type) init_list_##type()
#define _init_list(type) \
list_head_##type* init_list_##type() \
{ \
list_head_##type* h = (list_head_##type*)calloc(1, sizeof(list_head_##type)); \
h->last = h->elem = NULL; \
h->length = 0; \
return h; \
}
#endif
调用io
INIT_LIST_TYPE(int);
LIST_FUNC_INIT(int);
INIT_LIST_TYPE(float);
LIST_FUNC_INIT(float);
#define context_bam_elem list_element(int)
#define list_head_t list_head(int)
#define list_element_f_t list_element(float)
#define list_head_f_t list_head(float)
int main()
{
list_head_t* h = init_list(int);
list_head_f_t* h1 = init_list(float);
return 0;
}
---------------------
做者:晏九
来源:CSDN
原文:https://blog.csdn.net/weixin_42670653/article/details/81385745
版权声明:本文为博主原创文章,转载请附上博文连接!编译