【发布时间】:2020-03-12 04:46:24
【问题描述】:
我已经使用 C 有一段时间了,但有时当我想到如何解决问题时,我似乎想不出任何其他方式,只能以 OO 方式,就像我在学校所教的那样。由于我一直在使用 C,我主要使用的是 OO 模式,但在 C 中,有时会与语言对抗以使其工作。举个简单的例子,如果我需要写一个文件系统资源抽象,我会考虑写一个 Resource 基类,它会被 ImageFile 类和 AudioFile 类继承。
class Resource {
bool opened;
virtual bool load_file(const char *fpath);
virtual bool release(void);
}
class ImageFile : Resource {
bool load_file(const char *fpath) { ... }
bool release(const char *fpath) { ... }
}
class AudioFile : Resource {
bool load_file(const char *fpath) { ... }
bool release(const char *fpath) { ... }
}
int main() {
Resource img = ImageFile();
Resource mus = AudioFile();
img.load_file("my_image.png");
mus.load_file("song.mp3");
img.release();
mus.release();
return 0;
}
在 C 中,我使用函数指针来复制这种行为。问题是,那仍然是面向对象的设计,我想学习程序化思考。你将如何以程序化的方式设计同样的问题? OO 继承如何转化为程序化?你觉得程序如何?
【问题讨论】:
-
在 C 中唯一接近继承的是在
struct上使用公共标头。 -
但是函数指针是执行您在上面尝试执行的操作的方法。例如,这就是设备驱动程序在 Unix 内核中的工作方式,它们被表示为带有一堆函数指针的对象,用于所有标准设备操作。
标签: c oop procedural