In the Last post, the function polymorphism is realized by the diversification of the parameters, however, there is a real scene is a function of the number of parameters and the same type.
But the operation process is different, for example, + 、-、 *,/and other basic four, which are two yuan far, and the parameters of the type is basically the same, at this time how to polymorphic it.
I think it's kind of interesting. The purpose of polymorphism is to reduce the repetition of the definition, choosing the most appropriate type to automatically match the corresponding function.
(There is also a parent class object that references a subclass instance, but there is no concept of inheritance in C, so this is no longer explained)
So poised, I think it's possible to use the hidden function name to achieve the desired effect (just a way of thinking).
Examples are as follows:
#include <stdio.h>typedef int func_t (int,int); int add (int a, int b) {return a+b;}; int sub (int a, int b) {return a-A;}; int mul (int a, int b) {return a*b;}; int div (int a, int b) {return a/b;}; void print (int *arr, int len) {int i; for (i=0;i<len;i++) printf ("%d\t", Arr[i]); Putchar (' \ n ');} int main (void) {void (*FUNC_P1) (int *,int len); Int (*func_p2[4]) (int,int) = {Add,sub,mul,div}; func_t *func_p3[4] = {Add,sub,mul,div}; equals with func_p2 int array[]={1,22,3,44,5,66}; FUNC_P1 = print; FUNC_P1 (array,sizeof (array)/sizeof (int)); In order to test func-point printf ("%d\t%d\t%d\t%d\n", Func_p2[0] (2,1), func_p2[1] (2,1), func_p2[2] (2,1), Func_p2[3] (2 , 1)); printf ("%d\t%d\t%d\t%d\n", Func_p3[0] (2,1), func_p3[1] (2,1), func_p3[2] (2,1), func_p3[3] (2,1)); return 0;}
GCC compilation
$ Gcc-o Calc CALC.C
$./calc
1 22 3 44 5 66--use of test function pointers
3 1 2 2--Using the FUNC_P2 pointer function for 2+1 | 2-1 | 2*1 | 2/1
3 1 2 2--Use FUNC_P3 function pointer array implementation 2+1 | 2-1 | 2*1 | 2/1
Summary:
For the alternative polymorphism--the same parameter (number and type) is realized by the idea of hiding function name.
We look forward to your generous comment!
A thought of C language realizing alternative "polymorphism"