楼主有些误解了,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语言怎么实现的看我转的这篇文章吧
最简单的做法是在结构体里存函数指针,然后初始化结构体的时候将函数的地址赋值给它。
复杂一点的,就得按照C++的多态原理,用虚函数表(其实就是能记录函数名对应的函数地址就好)记录每种结构体的成员函数地址,然后每个结构体里多存一个虚函数表的地址。。。然后调用函数的时候查到函数地址强转成函数类型然后调用。。。这个可以自己研究一下c++的虚函数表机制。
参数多态概念:采用参数化模板,通过给出不同的类型实参,使
得一个结构有多种类型。
对实参所取的类型不加限制;对不同的实参执行的是相同的代码。
比如说一个压栈操作函数,它既可以实现int型数据压栈,也可以实现char型数据压栈
如:自定义类型void 就是;void* 是C语言的一个“多态”方式
又如:
参数多态:对不同类型的值执行相同的代码。
宏----好象不对,比如象典型的这种情况
#define max(a,b) ((a)(b)?(a):(b)
int a=5,b=0;
max(a++,b); (1) a被累加2次
max(a++,b+10); (2)a被累加1次
(1)和(2)的行为并不相同。
多态
多态是OOP的另一个重要概念。多态的意思是事物具有不同形式的能力。举个例子,对于不同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。比如说加法操作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。
一个函数处理不同数量、不同类型的参数。就像某个单词在不同的上下文中具有不同的含义。
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。多态在实现继承的过程中被广泛应用。
面向对象程序设计语言支持多态,术语称之为“one interface multiple method(一个接口,多个实现)”。简单来说,多态机制允许通过相同的接口引发一组相关但不相同的动作,通过这种方式,可以减少代码的复杂度。在某个特定的情况下应该作出怎样的动作,这由编译器决定,而不需要程序员手工干预。
在多函数程序中,许多重要的数据被声明为全局变量,这样它们才可以被所有的函数访问。每个函数又可以具有它自己的局部变量。全局变量很容易被某个函数不经意之间改变。而在一个大程序中,很难分辨每个函数都使用了哪些变量。如果我们需要修改某个外部数据的结构,我们就要修改所有访问这个数据的函数。这很容易导致bug的产生。
在结构化程序设计中,另一个严重的缺陷是不能很好的模拟真实世界的问题。这是因为函数都是面向过程的,而不是真正的对应于问题中的各个元素。
面向过程的程序设计的一些特点如下:
·强调做(算法);
·大程序被分隔为许多小程序,这些小程序称为函数;
·大多数函数共享全局数据;
·数据开放的由一个函数流向另一个函数。函数把数据从一种形式转换为另一种形式。
采用由上至下的程序设计方法。
c++是一种编程语言,当然只有一种。但是基于c++的编程平台有很多种。
在这些平台上编程序,用的语言是c++的,但是在一些细节上会有所不同。我接触过的主要有vc++,symbian c++,borland c++,它们都是基于c++的,但是编程风格或方式稍有不同。
你学c++要打好基础,先学好c++语言。看书的时候可以找一些书名为“c++编程语言”之类的书,只有在学好c++语言后,才可以去具体的学习某个平台的编程教程。
一般来说,多态分为两种,静态多态和动态多态。静态多态也称编译时多态,主要包括模板和重载。而动态多态则是通过类的继承和虚函数来实现,当基类和子类拥有同名同参同返回的方法,且该方法声明为虚方法。
当基类对象,指针,引用指向的是派生类的对象的时候,基类对象,指针,引用在调用基类的虚函数,实际上调用的是派生类函数。这就是动态多态。
静态多态的实现。
静态多态靠编译器来实现,简单来说就是编译器对原来的函数名进行修饰,在c语言中,函数无法重载,是因为,c编译器在修饰函数时,只是简单的在函数名前加上下划线”_” ,不过从gcc编译器编译之后发现函数名并不会发生变化。
而c++编译器不同,它根据函数参数的类型,个数来对函数名进行修饰,这就使得函数可以重载,同理,模板也是可以实现的,针对不同类型的实参来产生对应的特化的函数,通过增加修饰,使得不同的类型参数的函数得以区分。
在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。
计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。
多态也可定义为“一种将不同的特殊行为和单个泛化记号相关联的能力”。
扩展资料:
多态可分为变量多态与函数多态。变量多态是指:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值派生类型的对象。函数多态是指,相同的函数调用界面(函数名与实参表),传送给一个对象变量,可以有不同的行为,这视该对象变量所指向的对象类型而定。因此,变量多态是函数多态的基础。
多态还可分为:动态多态(dynamic polymorphism)和静态多态(static polymorphism)。
对于C++语言,带变量的宏和函数重载(function overload)机制也允许将不同的特殊行为和单个泛化记号相关联。然而,习惯上并不将这种函数多态(function polymorphism)、宏多态(macro polymorphism)展现出来的行为称为多态(或静态多态),否则就连C语言也具有宏多态了。谈及多态时,默认就是指动态多态,而静态多态则是指基于模板的多态。
本文名称:c语言宏函数多态 函数的多态
分享链接:https://www.cdcxhl.com/article34/hgpepe.html
成都网站建设公司_创新互联,为您提供服务器托管、响应式网站、关键词优化、动态网站、手机网站建设、微信公众号
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联