如何用c语言实现多态

Python013

如何用c语言实现多态,第1张

最简单的做法是在结构体里存函数指针,然后初始化结构体的时候将函数的地址赋值给它。

复杂一点的,就得按照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语言中的确有你说的多变参数的函数,比如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语言怎么实现的看我转的这篇文章吧