2014-10-27 2 views
0

Недавно я просто хотел изменить свойство доступа класса в webkit.framework, чтобы получить доступ к частному члену данных.Можно ли изменить модификаторы доступа, создав новый файл заголовка?

Мой метод заключается в использовании нового файла заголовка для изменения свойства контроля доступа элемента. Это нормально?

Я не очень уверен в этом. Поэтому я просто хочу знать, как C++ реализует контроль доступа (открытый, закрытый, защищенный) и в какой фазе (компиляция или время выполнения).

+0

Просто убедитесь, что правильно поняли: вы скопировали существующее объявление класса из исходного файла заголовка проекта, изменили переменную-член от частного к публичному и используете модифицированный заголовок? Вы связываетесь с библиотеками, которые были скомпилированы с исходным заголовком? – Mat

+0

Просьба предоставить больше контекста. Почему вы хотите изменить модификаторы доступа? Действительно ли это хорошая идея - или объявлял этот член как частную такую ​​плохую идею в первую очередь? Как выглядит ваш код? Вы знаете, как 'public',' private' и 'protected' работают на C++, не так ли? – TobiMcNamobi

+0

@TobiMcNamobi, я знаю, как его использовать. Поскольку ios не предоставляет некоторый api для доступа к объекту Worker в webkit, но ему нужно его получить, поэтому я просто хочу получить его от другого объекта и, к сожалению. Нет никакого общедоступного метода, чтобы получить его, поэтому я должен получить его как элемент данных. – Chogri

ответ

1

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

C++ обеспечивает этот тип спецификаторов доступа ТОЛЬКО во время компиляции. В C++ нет механизма для обеспечения спецификаций доступа во время выполнения.

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

+0

Кстати, где я могу найти конкретное введение механизма контроля доступа C++? – Chogri

+0

@ Chhri Bjarn stroustrup в своей книге «Дизайн и эволюция C++» говорит: «Механизмы контроля доступа C++ обеспечивают защиту от несчастного случая, а не от мошенничества». Он продолжает говорить, что «любой язык программирования, поддерживающий доступ к необработанной памяти, оставит данные открытыми для преднамеренного вмешательства в способы, которые нарушают явно правила типа, заданные для данного элемента данных». Вы можете обратиться к этой книге для получения более подробной информации. – MNS

+0

Большое спасибо, это должно быть очень полезно. – Chogri