綜述
多態性是面向對象程序設計的一個重要特徵。函數
在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
版權聲明:本文爲博主原創文章,轉載請附上博文連接!編譯