2013-11-16 2 views
0

У меня есть теоретический вопрос об использовании геттеров и сеттеров.Полупроводники и приспособления для частных помощников

Скажем в классе У меня есть частная переменная и частный вспомогательный метод. Если частный метод обращается к частной переменной внутри класса, действительно ли это необходимо для этого с помощью метода getter/setter?

Мое мышление заключается в том, что для этого особого случая (поскольку доступ к частному методу невозможен из-за пределов класса), то не использовать геттеры и сеттеры и вместо этого просто «достигать» напрямую не будет нарушением инкапсуляция. Это правда?

Благодаря

+0

Этот вопрос, который может вызвать разногласия, может быть вызван нестандартным языком, поэтому этот вопрос может быть лучше подходит для программистов.stackexchange.com. –

ответ

1

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

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

0

Если частный метод доступа к частной переменной в классе, то это действительно ли это необходимо для этого с помощью метода getter/setter?

Нет, если я правильно понял ваш вопрос. Метод имеет доступ к закрытым членам класса, независимо от того, является ли он общедоступным или закрытым. Для уточнения, следующие как легальные в C++:

class MyClass 
{ 
private: 
    Method1() {member = 0;} 

public: 
    Method2() {member = 1;} 

private: 

    int member; 
} 

Мое мышление является то, что для этого одного частного случая (так как частный метод не может получить доступ извне класса), который не используется геттеры и сеттеры, а вместо этого просто «достигают» напрямую не будут быть нарушением инкапсуляции. Это правда?

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

Это все, что касается C++, конечно.

Смежные вопросы