Как реализовать публичные, частные и защищенные ключевые слова на языке c? - PullRequest
1 голос
/ 06 ноября 2010

Кто-нибудь может дать мне пример, чтобы сделать это.Предположим, что область действия статической переменной ограничена только файлом. Он является частным для этого файла. Как и некоторые примеры, которые я хочу знать.Другими словами, КАК ДОСТИГНУТЬ КОНЦЕПЦИЮ СКРЫТИЯ ДАННЫХ В C-ЯЗЫКЕ С НАСТОЯЩИМИ ДОСТУПНЫМИ КЛЮЧЕВЫМИ СЛОВАМИ (STRUCT, STATIC ... ETC)

Ответы [ 5 ]

4 голосов
/ 06 ноября 2010

Этот парень является одним из мировых авторитетов по встроенным системам.Он написал этот технический документ по ООП в c.

http://www.state -machine.com / resources / cplus_3.0_manual.pdf

2 голосов
/ 06 ноября 2010

Вы можете использовать частный заголовок (скажем, xyz_private.h), где вы определяете свои частные структуры (скажем, struct xyz_private_t). В публичном заголовке вы не можете сделать

typedef struct xyz_private_t *xyz_ptr_t;    or

typedef struct {
  ... some public members ...
  struct xyz_private_t *private;
} mytype_t;

Это похоже на PIMPL в C ++.

Приватный, друг, защищенный не может быть различен - либо файл может / имеет доступ к закрытому заголовку, либо он не может / не может.

1 голос
/ 06 ноября 2010

Да, внутренняя связь (статическая) эффективно делает вещи закрытыми для файла. Вам не обязательно это нужно, хотя. Вы можете смоделировать класс с закрытыми членами, определив структуру внутри исходного файла и предоставив пользователям только typedef и набор функций. Все функции, кроме «конструктора», принимают явный аргумент «this». Ваш искусственный конструктор просто выделит экземпляр вашего типа и вернет указатель. Поскольку все ваши функции будут определены (с внешней связью) в том же источнике, что и структура, они могут видеть элементы. Ваши пользователи, которые видят только прототипы typedef и function, не могут.

В этом случае вы можете использовать static для эмуляции синглтона, когда ваши функции возвращают указатель на ваш объявленный экземпляр.

1 голос
/ 06 ноября 2010

Вам придется переписать / расширить компилятор, добавить новую грамматику в лексикографический блок (это, вероятно, самая простая часть) и, что наиболее важно, добавить новые спецификации. Если бы вы добавили эти ключевые слова к языку C, у вас больше не было бы языка C, но производного. Ваш код не будет понят ни одним другим компилятором. Кроме того, это не просто ключевые слова, это определенное ожидаемое поведение, вы не можете просто реализовать ключевые слова, вам нужно добавить полную поддержку ООП для языка. Если это то, что вы планируете - удачи.

Скрытие данных - это особенность управляемых языков, поскольку у вашей программы есть отдельная среда выполнения, которая заботится о вещах за кулисами, этого не существует в C. Если вы хотите иметь эти функции (скрытие данных и другие абстракции ограничены управляемыми языками), вы должны были бы точно создать такую ​​конструкцию, т.е. реализация среды выполнения, чтобы позаботиться о вещах за кулисами. Тогда и только тогда вы сможете добиться сокрытия данных и других абстракций.

C просто не предлагает эти возможности, любой код в программе может получить доступ к любому адресу в виртуальной памяти процесса, обходя все, что вы планируете.

Мой совет, даже если вам будет трудно: используйте для этого управляемый язык. C не является правильным языком для достижения того, что вы хотите сделать.

0 голосов
/ 06 ноября 2010

C ++ возникла как прекомпилятор для C с прекомпиляторами, такими как Glockenspiel и CFront. Вы можете найти то, что ищете здесь (здесь также есть источники).

Если вы не получите оттуда подсказки, я думаю, что единственный способ добиться истинного сокрытия данных в C - это объявить ваши переменные как статические переменные для функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...