有没有办法用C编程语言编写类似OO的代码?


另请参阅:

通过搜索"[c]oo"找到.

推荐答案

第一个C++编译器("C类")实际上会生成C代码,所以这是可行的.

基本上,你的基类是一个 struct ;派生 struct 必须在第一个位置包含基 struct ,因此指向"派生" struct 的指针也将是指向基 struct 的有效指针.

typedef struct {
   data member_x;
} base;

typedef struct {
   struct base;
   data member_y;
} derived;

void function_on_base(struct base * a); // here I can pass both pointers to derived and to base

void function_on_derived(struct derived * b); // here I must pass a pointer to the derived class

The functions can be part of the structure as function pointers, so that a syntax like p->call(p) becomes possible, but you still have to explicitly pass a pointer to the struct to the function itself.

C++相关问答推荐

有关字符数组指针和次指针以及qsort函数中的cmp函数的问题

try 使用libusb控制音量时LIBUSB_WRIGHT_PIPE

为什么已经设置的值在C中被重置为for循环条件中的新值?

什么C代码将确定打开的套接字正在使用的网络适配器?

编译的时候g++通常会比GCC慢很多吗?

增加getaddrinfo返回的IP地址数量

显式地将值转换为它从函数返回的类型的含义是什么?

为什么net/if.h在ifaddrs.h之前?

非正规化边缘毛刺

如何在C++中处理按键

为什么此共享库没有预期的依赖项?

MacOS下C++的无阻塞键盘阅读

将数字的每一位数平方,并使用C将它们连接为一个数字(程序不能正确处理0)

将 struct 数组写入二进制文件时发生Valgrind错误

即使客户端不发送数据,也会发生UNIX套接字读取

c如何传递对 struct 数组的引用,而不是设置 struct 的副本

无法将字符串文字分配给 C 中的字符数组

我正在使用 klib 库 我可以使用 (khash) KHASH_SET_INIT_INT64() 负值作为键.因为我在头文件中看到它使用 unsigned long int

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

nullptr_t 是否会 destruct 类型双关或指针转换?