- 论坛徽章:
- 0
|
原帖由 OwnWaterloo 于 2009-3-27 21:13 发表 ![]()
不, 目前c++编译对non-virtual member function的流行的实现方式中,对象是不带函数指针的。
也就是说, non-virtual member function没有任何额外开销。
这点上, c++编译器是占优势的。
目前c++编 ...
我说的c实现OO中方法多态当然是指C++中的虚函数,如果不是虚函数,C中自然不用使用函数指针。
至于你说的C实现OO多态的方法需要使用函数指针数组导致大量void*。。。。
我就举个实际例子吧。
比如说VFS的设计,一个文件通常的操作有read(),write(),open(),close()...。
不同文件系统提供给上层的接口是一致的。
int read(int fd, char* buff, int count);
int write(int fd, char* buff, int count);
int open(char* path, int mode);
int close(int fd);
那么VFS就可以定义一个函数指针结构(不是数组)。
struct file_ops {
int (*read)(int fd, char* buff, int count);
int (*write)(int fd, char* buff, nt count);
int (*open)(char* path, nt mode);
int (*close)(int fd);
};
然后具体的文件系统就可以自己定义函数。
比如NFS文件系统可以使用
struct fle_ops nfs_file_ops = {.read = nfs_read, .write = nfs_wrte....}
FAT32文件系统可以使用
struct file_ops fat32_ops = {.read = fat32_read ....}
你可以看到,这里不存在void*的问题。 |
|