正文
C语言函数多态 c++语言的多态性
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
多态的原理是什么?
在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。
计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。
多态也可定义为“一种将不同的特殊行为和单个泛化记号相关联的能力”。
扩展资料:
多态可分为变量多态与函数多态。变量多态是指:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值派生类型的对象。函数多态是指,相同的函数调用界面(函数名与实参表),传送给一个对象变量,可以有不同的行为,这视该对象变量所指向的对象类型而定。因此,变量多态是函数多态的基础。
多态还可分为:动态多态(dynamic polymorphism)和静态多态(static polymorphism)。
对于C++语言,带变量的宏和函数重载(function overload)机制也允许将不同的特殊行为和单个泛化记号相关联。然而,习惯上并不将这种函数多态(function polymorphism)、宏多态(macro polymorphism)展现出来的行为称为多态(或静态多态),否则就连C语言也具有宏多态了。谈及多态时,默认就是指动态多态,而静态多态则是指基于模板的多态。
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语言怎么实现的看我转的这篇文章吧
如何用c语言实现多态
最简单的做法是在结构体里存函数指针,然后初始化结构体的时候将函数的地址赋值给它。
复杂一点的,就得按照C++的多态原理,用虚函数表(其实就是能记录函数名对应的函数地址就好)记录每种结构体的成员函数地址,然后每个结构体里多存一个虚函数表的地址。。。然后调用函数的时候查到函数地址强转成函数类型然后调用。。。这个可以自己研究一下c++的虚函数表机制。
c++多态的实现方式有哪些?
c++是一种编程语言,当然只有一种。但是基于c++的编程平台有很多种。
在这些平台上编程序,用的语言是c++的,但是在一些细节上会有所不同。我接触过的主要有vc++,symbian c++,borland c++,它们都是基于c++的,但是编程风格或方式稍有不同。
你学c++要打好基础,先学好c++语言。看书的时候可以找一些书名为“c++编程语言”之类的书,只有在学好c++语言后,才可以去具体的学习某个平台的编程教程。
一般来说,多态分为两种,静态多态和动态多态。静态多态也称编译时多态,主要包括模板和重载。而动态多态则是通过类的继承和虚函数来实现,当基类和子类拥有同名同参同返回的方法,且该方法声明为虚方法。
当基类对象,指针,引用指向的是派生类的对象的时候,基类对象,指针,引用在调用基类的虚函数,实际上调用的是派生类函数。这就是动态多态。
静态多态的实现。
静态多态靠编译器来实现,简单来说就是编译器对原来的函数名进行修饰,在c语言中,函数无法重载,是因为,c编译器在修饰函数时,只是简单的在函数名前加上下划线”_” ,不过从gcc编译器编译之后发现函数名并不会发生变化。
而c++编译器不同,它根据函数参数的类型,个数来对函数名进行修饰,这就使得函数可以重载,同理,模板也是可以实现的,针对不同类型的实参来产生对应的特化的函数,通过增加修饰,使得不同的类型参数的函数得以区分。
一个C语言问题,求大佬解答?
以下是实现上述功能的 C 程序示例:
#include stdio.h
#include string.h
#define MAX_LEN 80 // 字符串最大长度
int main(int argc, char *argv[])
{
if (argc 2) {
printf("Please specify a file name.\n");
return 1;
}
// 从命令行得到文件名
char *file_name = argv[1];
// 打开文件
FILE *fp = fopen(file_name, "r");
if (fp == NULL) {
printf("Failed to open file.\n");
return 1;
}
// 创建字符数组
char str[MAX_LEN];
// 从文件中读入一个字符串
fgets(str, MAX_LEN, fp);
// 关闭文件
fclose(fp);
// 输出字符串和字符串长度
printf("String: %s\n", str);
printf("Length: %d\n", (int)strlen(str));
return 0;
}
这段代码实现了从命令行得到文件名,然后使用 fgets 函数从文件中读入一个字符串,最后输出字符
关于C语言函数多态和c++语言的多态性的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。