我是C的新手,C ++尝试在C中实现多态(C不支持)但是有什么方法可以做到吗?
我的代码在哪里出错了?我已经看到这个网站上的代码有点复杂,我理解所以修改它但它不起作用。对不起,如果这个问题看起来很基本甚至是愚蠢的话。
#include <stdio.h>
void tripple() {
printf("in tripple");
}
void square() {
printf("\nin sq");
}
int main() {
void *al;
al=&tripple;
(*al)();
al=□
(*al)();
return 0;
}
答案 0 :(得分:4)
坦率地说,你最好推迟尝试在C中实现多态,直到你不再是C语言编程的新手。
你的代码是可疑的(它不能编译!)。这应该是void (*al)(void);
中的main
,您应该在void
和tripple
的参数列表中包含square
。您&
的作业中的函数名称前面不需要al
,但我认为它不会造成任何实际伤害。 (请注意;使用数组名称和数组名称的地址之间存在差异!即:char a[10]; char *s = a; char (*t)[10] = &a;
)您还应该在每个函数的每个消息的末尾添加换行符。消息开头的换行符通常(但不总是)表示问题。有时,可以在消息末尾省略换行符,但不经常这样。
在C中实现的任何多态都将使用函数指针。但是你不应该尝试在C中实现多态,直到你习惯使用函数指针而不尝试多态。我想可以说它是“通过跳入深入学习游泳”,但你最好学习一种支持多态的C ++这样的语言,而不是尝试用C语言来实现它。
答案 1 :(得分:3)
要解决您的直接问题,您需要输入al
作为函数指针。而不是void *al
,请使用void (*al)(void)
。
void*
是指向未知类型值的指针,因此无法作为函数执行。 void (*al)(void)
。是一个没有参数的函数的指针,它不返回任何内容。
答案 2 :(得分:1)
看看如何在C ++中使用VTABLE和VPTR来实现多态虚函数调用。
关于这个主题的好读物可以在Bruce Eckel的Thinking In C ++ Vol.1中找到。
参考:C ++如何实现后期绑定,第636页,Thinking In C ++(本书以PDF格式免费提供)
链接到下载页面:http://mindview.net/Books/TICPP/ThinkingInCPP2e.html