當前位置:首頁 » 編程語言 » c語言實現多態

c語言實現多態

發布時間: 2022-09-06 04:10:33

c語言空函數作用是什麼

如果定義函數時只給出一對花括弧{}而不給出其局部變數和函數體語句,則稱該函數為「空函數」。
空函數的作用:
(1)程序設計過程的需要。在設計模塊時,對於一些細節問題或功能在以後需要時再加上。這樣可在將來准備擴充的地方寫上一個空函數,這樣可使程序的結構清晰,可讀性好,而且易於擴充。
(2)在C++程序中,可以將基類中的虛函數定義為空函數,通過派生類去實例化,實現多態。

對於你所說的「void表示主函數為空函數,沒有返回值」:
void 函數名(參數);這種形式的函數定義,是說所定義的函數沒有返回值。沒有返回值(也就是函數體內沒有return語句),是指函數只是完成一系列動作,不需要返回值給調用函數;或者返回值是通過指針等方式返回給調用函數的。

❷ c語言如何用鏈表實現多態

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
int nDate;
struct node *pstnext;
}Node;

//鏈表輸出
void output(Node *head)
{
Node *p = head->pstnext;
while(NULL != p)
{
printf("%d ", p->nDate);
p = p->pstnext;
}
printf("\r\n");
}

//鏈表建立
Node* creat()
{
Node *head = NULL, *p = NULL, *s = NULL;
int Date = 0, cycle = 1;
head = (Node*)malloc(sizeof(Node));
if(NULL == head)
{
printf("分配內存失敗\r\n");
return NULL;
}
head->pstnext = NULL;

p = head;
while(cycle)
{
printf("請輸入數據且當輸入數據為0時結束輸入\r\n");
scanf("%d", &Date);
if(0 != Date)
{
s = (Node*)malloc(sizeof(Node));
if(NULL == s)
{
printf("分配內存失敗\r\n");
return NULL;
}
s->nDate = Date;
p->pstnext = s;
p = s;
}
else
{
cycle = 0;
}
}
p->pstnext = NULL;
return(head);
}

//鏈表按值查找
void research_Date(Node *head, int date)
{
Node *p;
int n=1;
p = head->pstnext;
while(NULL != p && date != p->nDate)
{
p = p->pstnext;
++n;
}
if(NULL == p)
{
printf("鏈表中沒有找到該值");
}else if(date == p->nDate)
{
printf("要查找的值%d在鏈表中第%d個位置\r\n", date, n);
}
return;
}

//按序號查找
void research_Number(Node *head, int Num)
{
Node *p=head;
int i = 0;
while(NULL != p && i < Num)
{
p = p->pstnext;
i++;
}
if(p == NULL)
{
printf("查找位置不合法\r\n");
}else if(i == 0)
{
printf("查找位置為頭結點\r\n");
}else if(i == Num)
{
printf("第%d個位置數據為%d\r\n", i, p->nDate);
}
}

//在指定元素之前插入新結點
void insert_1(Node *head, int i, int Newdate)
{
Node *pre = head, *New = NULL;
int j = 0;
while(NULL != pre && j < i-1)
{
pre = pre->pstnext;
j++;
}
if(NULL == pre || j > i-1)
{
printf("插入位置不存在\r\n");
}else
{
New = (Node*)malloc(sizeof(Node));
if(NULL == New)
{
printf("分配內存失敗\r\n");
return;
}
New->nDate = Newdate;
New->pstnext = pre->pstnext;
pre->pstnext = New;
}

}

//在指定元素之後插入新結點
void insert_2(Node *head, int i, int Newdate)
{
Node *pre = head, *New = NULL;
int j = 0;
while(NULL != pre->pstnext && j < i)
{
pre = pre->pstnext;
j++;
}
if(j == i)
{
New = (Node*)malloc(sizeof(Node));
if(NULL == New)
{
printf("分配內存失敗\r\n");
return;
}
New->nDate = Newdate;
New->pstnext = pre->pstnext;
pre->pstnext = New;
}else
{
printf("插入位置不存在\r\n");
}
}

//刪除指定結點
void Delete_1(Node *head, int i3)
{
Node *p = head, *pre = NULL;
int j = 0;
while(NULL != p && j < i3)
{
pre = p;
p = p->pstnext;
j++;
}
if(NULL == p)
{
printf("刪除位置不存在\r\n");
}else
{
pre->pstnext = p->pstnext;
free(p);
}
}

void main()
{
int date, num; //待查找數據
int i3; //指定刪除元素的位置
int i1, i2, Newdate_1, Newdate_2; //待插入的新數據
Node *Head = NULL; //定義頭結點
Node *Head_New = NULL;

//鏈表建立
Head = creat();
printf("輸出建立的單鏈表\r\n");
output(Head);

//鏈表按值查找
printf("請輸入待查找的數據\r\n");
scanf("%d", &date);
research_Date(Head, date);

//鏈表按序號查找
printf("請輸入待查找序號\r\n");
scanf("%d", &num);
research_Number(Head, num);

//在指定第i1個元素之前插入新元素Newdate
printf("在指定第i個元素之前插入新元素Newdate");
printf("請輸入i與元素且以逗號間隔\r\n");
scanf("%d,%d", &i1, &Newdate_1);
insert_1(Head, i1, Newdate_1);
printf("插入後新鏈表\r\n");
output(Head);

//在指定第i2個元素之後插入新元素Newdate
printf("在指定第i個元素之後插入新元素Newdate");
printf("請輸入i與元素且以逗號間隔\r\n");
scanf("%d,%d", &i2, &Newdate_2);
insert_2(Head, i2, Newdate_2);
printf("插入後新鏈表\r\n");
output(Head);

//指定刪除i3元素
printf("刪除元素的位置\r\n");
scanf("%d", &i3);
Delete_1(Head, i3);
printf("刪除後新鏈表\r\n");
output(Head);

return;
}

❸ 如何通過c語言實現封裝,繼承和多態

用c++吧,用c語言實現的有點兒勉強

❹ C語言是怎樣實現封裝,繼承,多態的

封裝,繼承,多態的是C++的面向對象的特性,C語言不具備這些特性。

❺ C語言的多態是否是類似於用結構指針的強制轉換來實現的,具體實現方式類似於Linux萬能鏈表

肯定不是的啊。

這里說的多態應該是C++面向對象的多態性質。

是由於類繼承之後的一種特性。


指針轉換,比如 int* a =(int *)p;

其實a和p都是兩個4bytes的地址數據,強制轉換就是把數值轉了了一下。


而多態是體現在運行時,

比如

class man 繼承自 class person

class woman 繼承自 class person


假設有這樣一段代碼:

if(a==1){
p=newman;
}
else{
p=newwoman;
}
那現在p可能是man或者woman了,不運行是實現不知道的,這就是多態的一種體現。

具體的p的屬性實際存在內存當中的,和指針強制轉換不一樣。

❻ 這個要實現多態 C語言 第一次求和第二次求最大值第三次求最小值。 輸入兩個數。 我想問下 函數指針

這道題想在一個函數里做3種功能(求和、最大值、最小值),有2種方法。
1.直接在process函數里寫3個小函數;
2.把3個小函數放到外面,通過函數指針傳進來調用,本題要求的是第二種。
開始了哦!
void process(int nFlag, int (*p)(int, int), int nFirst, int nSecond)
{
switch(nFlag)
{
case 1:
p(nFirst, nSecond);//求和
break;
case 2:
p(nFirst, nSecond);//求最大值
break;
case 3:
p(nFirst, nSecond);//求最小值
break;
}
}

int GetSum(int, int)
{
...
}

int GetMax(int, int)
{
...
}

int GetMin(int, int)
{
...
}

void main()
{
process(1, &GetSum, 1, 2);
process(2, &GetMax, 1, 2);
process(3, &GetMin, 1, 2);
}

❼ 如何用c語言實現多態

最簡單的做法是在結構體里存函數指針,然後初始化結構體的時候將函數的地址賦值給它。
復雜一點的,就得按照C++的多態原理,用虛函數表(其實就是能記錄函數名對應的函數地址就好)記錄每種結構體的成員函數地址,然後每個結構體里多存一個虛函數表的地址。。。然後調用函數的時候查到函數地址強轉成函數類型然後調用。。。這個可以自己研究一下c++的虛函數表機制。

❽ c語言的繼承與多態。 編寫一個程序實現小型公司的工資管理。該公司主

只有C++有繼承和多態。

❾ 如何用c語言實現多態

最簡單的做法是在結構體里存函數指針,然後初始化結構體的時候將函數的地址賦值給它。

復雜一點的,就得按照C++的多態原理,用虛函數表(其實就是能記錄函數名對應的函數地址就好)記錄每種結構體的成員函數地址,然後每個結構體里多存一個虛函數表的地址。。。然後調用函數的時候查到函數地址強轉成函數類型然後調用。。。這個可以自己研究一下c++的虛函數表機制。

❿ C/C++語言特點是什麼

(1)C語言特點:

1.作為一種面向過程的結構化語言,易於調試和維護;

2.表現能力和處理能力極強,可以直接訪問內存的物理地址;

3.C語言實現了對硬體的編程操作,也適合於應用軟體的開發;

4.C語言還具有效率高,可移植性強等特點。

(2)C++語言特點:

1.在C語言的基礎上進行擴充和完善,使C++兼容了C語言的面向過程特點,又成為了一種面向對象的程序設計語言;

2.可以使用抽象數據類型進行基於對象的編程;

3.可以使用多繼承、多態進行面向對象的編程;

4.可以擔負起以模版為特徵的泛型化編程。

C++與C語言的本質差別:在於C++是面向對象的,而C語言是面向過程的。或者說C++是在C語言的基礎上增加了面向對象程序設

計的新內容,是對C語言的一次更重要的改革,使得C++成為軟體開發的重要工具。

熱點內容
設計編譯程序注意的問題 發布:2024-10-18 14:08:43 瀏覽:254
傳智播客android視頻 發布:2024-10-18 14:04:42 瀏覽:904
手機版安卓吃雞哪個好 發布:2024-10-18 14:01:40 瀏覽:491
編程自學入門教程 發布:2024-10-18 13:50:58 瀏覽:141
伊迪阿明訪問中國 發布:2024-10-18 13:49:54 瀏覽:10
人三琳外傳腳本 發布:2024-10-18 13:38:16 瀏覽:839
電腦發件箱伺服器錯誤怎麼弄 發布:2024-10-18 13:30:36 瀏覽:914
evm部署solc編譯文件 發布:2024-10-18 13:29:47 瀏覽:835
android發送at指令 發布:2024-10-18 13:14:18 瀏覽:659
安卓手機哪個工藝最好 發布:2024-10-18 13:01:43 瀏覽:283