w****g 发帖数: 206 | 1 /thinking in C++/第三章最后一个程序,硬是看不懂, 请高手指点一下:
//: C03:FunctionTable.cpp
// Using an array of pointers to functions
#include
using namespace std;
// A macro to define dummy functions:
#define DF(N) void N() { \
cout << "function " #N " called..." << endl; }
DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);
//以上是和前一句, 宏定义一起的么? 怎么解释?
void (*func_table[])() = { a, b, c, d, e, f, g };
//以上function定义怎么理解,a,b,...g,是arguments还是statments?
int main() {
while(1) {
cout << "press a key from 'a' to 'g' "
"or q to quit" << endl;
char c, cr;
cin.get(c); cin.get(cr); // second one for CR
if ( c == 'q' )
break; // ... out of while(1)
if ( c < 'a' || c > 'g' )
continue;
(*func_table[c - 'a'])();
//以上一句为什么不能改成:(*func_table[c])();
}
} ///:~
Thanks! | i**********e 发帖数: 1145 | 2 DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);
//以上是和前一句, 宏定义一起的么? 怎么解释?
DF是个macro,所以有DF的地方就是复制黏贴。例如DF(a)等于
void a() {
cout << "function a called..." << endl;
}
void (*func_table[])() = { a, b, c, d, e, f, g };
//以上function定义怎么理解,a,b,...g,是arguments还是statments?
a, b, ... g 是 function name。在这里func_table[]array里的pointers被初始化。
ie, func_table[0] = a, func_table[1] = b,...
(*func_table[c - 'a'])();
//以上一句为什么不能改成:(*func_table[c])();
因为c是一个char type,里面的值是ascii code。给个例子:如果 c = ‘e’,因为‘
e'的ascii值是101,所以c-'a'就能得到'e'与'a'的差距, = 4.
一些常见面试题的答案与总结 -
http://www.ihas1337code.com
【在 w****g 的大作中提到】 : /thinking in C++/第三章最后一个程序,硬是看不懂, 请高手指点一下: : : //: C03:FunctionTable.cpp : // Using an array of pointers to functions : #include : using namespace std; : // A macro to define dummy functions: : #define DF(N) void N() { \ : cout << "function " #N " called..." << endl; } : DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);
| w****g 发帖数: 206 | |
|