当前位置:首页 » 编程语言 » c语言如何实现多态
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言如何实现多态

发布时间: 2022-04-14 10:12:30

㈠ C++中怎么用多态实现函数的多变参数

楼主有些误解了,c语言中的确有你说的多变参数的函数,比如printf()scanf()等等,它们的实现也的确是用宏来实现了,具体实现不赘述,C++是C的超集,自然也可以用这种方式解决。
下面说多态,其实多态是面向对象的特征,具体到C++中,函数的重载,重写,以及虚函数都是多态的体现,而类似于C中的多变函数,则是用函数的重载实现的,举个例子
class A
{
public:
void func(int);
void func(float);
void func(long);
};
void A::func(int x)
{
cout << "int version" << endl;
}
void A::func(float x)
{
cout << "float version" << endl;
}
void A::func(long x)
{
cout<< "long version" << endl;
}

void main()
{
int a;
float b;
long c;
func(c);
func(b);
func(a);
}
类A中的func()成员函数有3个重载版本,重载函数是通过对应不同的参数来识别时调用哪一个函数,这就是类似C中的可变函数。
(重载只是C++中多态的一角,想更详细的了解的,我想市面上任何一本C++
的书都会讲到,不过重点可能都是虚函数,重载和重写比较容易理解)
----------------我是无视上面的分割线--------------------------
你的问题里面不是说C++么
C语言怎么实现的看我转的这篇文章吧

㈡ 如何实现多态

在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。

计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。
多态也可定义为“一种将不同的特殊行为和单个泛化记号相关联的能力”。

(2)c语言如何实现多态扩展阅读:

多态可分为变量多态与函数多态。变量多态是指:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值派生类型的对象。函数多态是指,相同的函数调用界面(函数名与实参表),传送给一个对象变量,可以有不同的行为,这视该对象变量所指向的对象类型而定。因此,变量多态是函数多态的基础。
多态还可分为:动态多态(dynamic polymorphism)和静态多态(static polymorphism)。

对于C++语言,带变量的宏和函数重载(function overload)机制也允许将不同的特殊行为和单个泛化记号相关联。然而,习惯上并不将这种函数多态(function polymorphism)、宏多态(macro polymorphism)展现出来的行为称为多态(或静态多态),否则就连C语言也具有宏多态了。谈及多态时,默认就是指动态多态,而静态多态则是指基于模板的多态。

㈢ C语言中模拟多态

请你到专业网站去咨询一下吧,这里关注较少。

㈣ C语言是怎样实现封装,继承,多态的

封装,继承,多态的是C++的面向对象的特性,C语言不具备这些特性。

㈤ 这个要实现多态 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++的,但是在一些细节上会有所不同。我接触过的主要有vc++,symbian c++,borland c++,它们都是基于c++的,但是编程风格或方式稍有不同。

你学c++要打好基础,先学好c++语言。看书的时候可以找一些书名为“c++编程语言”之类的书,只有在学好c++语言后,才可以去具体的学习某个平台的编程教程。

一般来说,多态分为两种,静态多态和动态多态。静态多态也称编译时多态,主要包括模板和重载。而动态多态则是通过类的继承和虚函数来实现,当基类和子类拥有同名同参同返回的方法,且该方法声明为虚方法。

当基类对象,指针,引用指向的是派生类的对象的时候,基类对象,指针,引用在调用基类的虚函数,实际上调用的是派生类函数。这就是动态多态。

静态多态的实现。

静态多态靠编译器来实现,简单来说就是编译器对原来的函数名进行修饰,在c语言中,函数无法重载,是因为,c编译器在修饰函数时,只是简单的在函数名前加上下划线”_” ,不过从gcc编译器编译之后发现函数名并不会发生变化。

而c++编译器不同,它根据函数参数的类型,个数来对函数名进行修饰,这就使得函数可以重载,同理,模板也是可以实现的,针对不同类型的实参来产生对应的特化的函数,通过增加修饰,使得不同的类型参数的函数得以区分。

㈦ C语言中怎么实现多态

不能,C是过程性语言,不支持多态这种对象性的特征。

㈧ 如何通过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的属性实际存在内存当中的,和指针强制转换不一样。