и в конце я бы хотел использовать функцию разговора следующим образом: dog-> talk (собака);когда dog является указателем на класс DogFile
Это невозможно, поскольку talk
не является членом структуры DogFile
.Ваш код в dog_file_talk()
выглядит правильно, поэтому вместо того, чтобы пытаться использовать dog->talk (dog)
, используйте dog_file_talk (dog)
.
Боюсь, это самое близкое к OOP в C с GObject.Если бы вы имели элемент talk
в структуре DogFile
, этот указатель дублировался бы для каждого экземпляра DogFile
, что предотвратило бы его переопределение подклассами, а также трата памяти.
Если вы хотите более «естественный» ООП, используйте C ++ (или более современный язык, такой как Rust).