1. Q:下面两个声明有何区别?
struct x1 {...}; typedef struct {...} x2;
A:第一种形式声明了一个“结构标签”,第2种形式声明了一个“类型定义”。前者在声明结构的实例时必须使用struct关键字,如"struct x1 a;",后者则不需要使用struct关键字,如"x2 b;"。但这个区别在C++编译器和某些模仿C++的C编译器中已经完全不存在了,在C++中结构标签在本质上都自动声明为类型定义。
2. Q:在C语言中是否有模拟继承等面向对象程序设计特性的好方法?
A:把函数指针直接加入到结构中就可以实现简单的“方法”。你可以使用各种不雅而暴力的方法来实现继承,例如通过预处理器或让“基类”的结构作为初始的子集,但这些方法都不完美。另外,也没有操作符的重载和覆盖。
时间: 2024-12-25 02:18:04