Erros, bugs, perguntas - página 1057

 
Zloy_Koldun:

A carteira é apenas um caso especial. E ninguém a impede de ser colocada na parte privada.

Num outro caso, pode ser necessário aceder à variável de classe mãe do objecto de outra pessoa.

E isto cabe ao programador decidir se o permite ou não. E o compilador deve garantir que o programa funciona correctamente.

É essa a questão, se este caso muito diferente lhe ocorrer, significa que a sua arquitectura é conceptualmente errada e potencialmente perigosa.

Em C++, o conceito das chamadas classes amigáveis foi introduzido em algum momento de uma forma infeliz. É como se uma classe soubesse como outra classe está organizada, pode trabalhar em segurança com os seus dados internos. A prática da sua utilização por milhares de programadores em todo o mundo mostrou que é uma coisa perigosa, criando mais problemas do que resolvendo-os, pelo que é abandonada em linguagens modernas como Java e C#.

 
C-4:
Esta característica foi desagradavelmente surpreendente. É definitivamente uma treta se o compilador permitir mudar o campo privado da instância de outra pessoa. Devemos afixá-lo no Service Desk.
Olham para as vantagens, e é assim que também lá está.
 
Zloy_Koldun:

Não compreendo: porque é que se quer limitar tanto?

Acha que tornará automaticamente o seu programa mais seguro?

Não o fará! Pelo contrário.

São as restrições desnecessárias que um dia o farão escrever dessa forma:

Sabe uma ou duas coisas sobre o OOP, mas ainda não o entendeu.

Veja:

///
/// Класс - меценат. Любой желающий может взять из его кошелька сколько хочет.
/// Если у нас монополия на меценатов, и он может быть только один, объявляем класс статическим
/// (на его работу это никак не повлияет).
///
class Меценат
{
    public:
      /// Отдает нужное количество денег
      int GetMoney(int СколькоДенегВзять)
      {
          кошелек -= СколькоДенегВзять;
          return СколькоДенегВзять;
      }
    private:
       int кошелек;
};
É surpreendente que tenha fechado a variável "carteira", apesar de a ideia original da classe ser a de disponibilizar a sua carteira a todos? Mas se todos levarem o quanto quiserem, perderemos dinheiro e isso é impossível. Agora a função GetMoney permite-o, mas depois de adicionar várias linhas, não vai permitir levar mais dinheiro. Agora imagine que a classe Maecenas é acedida por dezenas de diferentes objectos que pedem dinheiro. Se a variável carteira for aberta, cada um destes objectos teria também de controlar (ou seja, ter a sua própria implementação) para verificar se têm dinheiro suficiente. E se pelo menos um deles não o fizer, corre o risco de obter um valor negativo em vez de zero, o que significaria que pediu dinheiro e acabou por ficar também a dever dinheiro.
 
C-4:

Amigo, vejo que sabe uma ou duas coisas sobre o OOP, mas ainda não tem a essência do assunto.

Veja:

É surpreendente que tenha fechado a variável "bolsa", apesar de a ideia original da classe ser a de disponibilizar a sua bolsa a todos? Mas se todos levarem o quanto quiserem, perderemos dinheiro e isso é impossível. Agora a função GetMoney permite-o, mas depois de adicionar várias linhas, não vai permitir levar mais dinheiro. Agora imagine que a classe Maecenas é acedida por dezenas de diferentes objectos que pedem dinheiro. Se a variável carteira for aberta, cada um destes objectos teria também de controlar (ou seja, ter a sua própria implementação) para verificar se têm dinheiro suficiente. E se pelo menos um deles não o fizer, corre o risco de obter um valor negativo em vez de zero, o que significaria que pediu dinheiro e acabou por ficar a dever dinheiro também.
Eu não tinha nada contra uma carteira privada. A conversa começou com isto:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
 
Zloy_Koldun:
Eu não tinha nada contra a carteira privada. A conversa começou com isto:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
É isso mesmo. A classe B refere-se à classe A externa e quer que as variáveis protegidas da classe A estejam disponíveis para ela. Onde está a lógica aqui que eu não compreendo.
 
C-4:
Isto é correcto. A classe B acede à classe A externa e pretende que as variáveis protegidas da classe A lhe sejam disponibilizadas. Não compreendo a lógica aqui.
Não tem nada a ver com lógica, quer...!
 
MetaDriver:
O que é que a lógica tem a ver com isto?

http://alenacpp.blogspot.com/2006/03/blog-post_11.html

O modificador protegido é uma puta. Raramente é realmente necessário.

O verdadeiro encapsulamento implica a privacidade dos dados.

Права доступа при наследовании
  • 2006.03.11
  • alenacpp.blogspot.com
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
 
Pode dizer-me se quer seleccionar o primeiro personagem no pos - devo colocar 1 ou 0 no pos? Está indexado como em arrays?
 
paladin800:
Pode dizer-me se quer seleccionar o primeiro personagem no pos - devo colocar 1 ou 0 no pos? Está indexado como em arrays?
Isto é fácil de verificar: Imprimir.
 
paladin800:
Pode dizer-me se quer seleccionar o primeiro personagem no pos - devo colocar 1 ou 0 no pos? Está indexado como em arrays?
Sim, a partir do zero.