当前位置:首页 » 编程语言 » 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++成为软件开发的重要工具。

热点内容
91网友上传视频 发布:2025-01-14 02:31:39 浏览:789
linux系统下载iso下载 发布:2025-01-14 02:31:34 浏览:698
ftp代理ip 发布:2025-01-14 02:29:46 浏览:886
设qq密码时应该设什么 发布:2025-01-14 02:13:20 浏览:605
剑侠情缘主线脚本 发布:2025-01-14 02:11:05 浏览:411
java执行ftp命令 发布:2025-01-14 02:05:21 浏览:937
青柠檬编程 发布:2025-01-14 02:05:18 浏览:882
下载加密日记本 发布:2025-01-14 02:05:16 浏览:539
汽车的假配置有哪些 发布:2025-01-14 02:03:16 浏览:42
二次插值算法 发布:2025-01-14 02:02:01 浏览:163