Ошибки, баги, вопросы - страница 1056

 

Обоснование для текущей ситуации я и сам могу найти: строгое разграничение "прав собственности" между экземплярами одного класса могло бы привести к загромождению синтаксиса при описании всяческих бинарных операций (даже на одном уровне иерархии). Однако при наследовании "прямой доступ" уж точно следует обрезать. 

Ибо нефиг, однозначно.. ;)

 
MetaDriver:

1. Помещение в приватную часть ничего не изменит в случае

При наследовании изменит, это понятно.

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

3. Ну так и пусть решает.  Корректно. ;)

4. Вот весь вопрос в том и состоит: что именно считать "корректной работой".

1. Если Вы действительно хотите спрятать свой кошелёк, то зачем делаете функцию gч() ?

2. А при копировании экземпляров имеются? 

 
Zloy_Koldun:

1. Если Вы действительно хотите спрятать свой кошелёк, то зачем делаете функцию gч() ?

2. А при копировании экземпляров имеются? 

Читай предыдущий мой пост. Там все ответы.

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

Гы...

 
 
MetaDriver:

1. Помещение в приватную часть ничего не изменит в случае

class Человек
{
private:
   int кошелёк; 
public:
   void Человек() {  кошелёк=3; }
   void gч( Человек& ч )  
   { 
    ч.кошелёк--;   // сейчас работает.  а не должно ;)
   }
};

При наследовании изменит, это понятно.

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

3. Ну так и пусть решает.  Корректно. ;)

4. Вот весь вопрос в том и состоит: что именно считать "корректной работой".

Да работает, да не должно. Кстати при autocomplete в ME (при написании ч.) тебе не выдадут переменную "кошелёк" тк она в привате, поэтому наверно эта фича так долго была не замеченной.
 
class Человек
{
private:
   int кошелёк; 
public:
   void Человек() {  кошелёк=3; }
   void gч( Человек& ч )  
   { 
    ч.кошелёк--;   // Работает и должно работать!
   }
   void gcч( const Человек& ч )  
   { 
    ч.кошелёк--;   // Не работает, как и должно.
   }
};
 
Zloy_Koldun:

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

Если это невозможно, тогда видимо тема сисек инкапсуляции в языке не раскрыта.  Не?

 
MetaDriver:

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

Если это невозможно, тогда видимо тема сисек инкапсуляции в языке не раскрыта.  Не?

Это невозможно. И не нужно. Если не согласен, приведи здравый пример.
 
Что означает эта ошибка, отложка не сработала: " HistoryBase: 114 errors in 'GBPUSD60'
 
MetaDriver:
class Человек
{
private:
   int кошелёк; 
public:
   void Человек() {  кошелёк=3; }
   void gч( Человек& ч )  
   { 
    ч.кошелёк--;   // сейчас работает.  а не должно ;)
   }
};
Эта особенность неприятно удивила. Однозначно это херь полная, если компилятор позволяет менять приватное поле чужого экземпляра. Надо бы в сервисдеск запостить.
 
C-4:
Эта особенность неприятно удивила. Однозначно это херь полная, если компилятор позволяет менять приватное поле чужого экземпляра. Надо бы в сервисдеск запостить.

Я не пойму: вы для чего так хотите сами себя ограничить?

Думаете от этого ваша программа автоматически станет безопаснее?

Не станет! Скорее даже наоборот.

Именно лишние ограничения заставят вас когда-нибудь написать так:

static int Мой_Кошелёк; // Бери, все, кто хочет.
Причина обращения: