Я использую C некоторое время, но иногда, когда я думаю о том, как решить проблему, я не могу думать ни о каком другом способе, кроме объектно-ориентированного подхода, как меня учили в школе. И поскольку я использовал 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 я воспроизвожу это поведение с помощью указателей на функции. Дело в том, что это все еще объектно-ориентированный дизайн, и я хочу научиться мыслить процедурно. Как бы вы подошли к решению этой же проблемы процедурным способом? Как объектно-ориентированное наследование трансформируется в процедурное? Как вы считаете процедурным?
struct
. - person Barmar   schedule 12.03.2020