O que significa o modificador constante após uma declaração de método - página 5

 
Alexey Kozitsyn:
O que é chamado aqui é que se o objeto1 da classe A chama um método constante da classe A, então esse método não pode mudar esse objeto1 (ou seja, o objeto1 que o chamou). Se, entretanto, o objeto1 for passado por referência ao mesmo método constante, mas chamado do objeto2 da classe A, então o objeto1 pode ser modificado. O objeto2, por sua vez, não pode.

Como um objeto pode chamar um método? Um método pode ser chamado a partir de uma função ou de outro método.

Não é apenas um método de classe que é chamado, mas um método de um objeto específico. A classe em si é uma abstração.

 
Dmitry Fedoseev:

Como um objeto pode chamar um método? Um método pode ser chamado a partir de uma função ou de outro método.

Não é apenas um método de classe que é chamado, mas um método de um objeto específico. A classe em si é uma abstração.

Isso é o que é tão trivial. E um registro do tipo

obj.method();

Como é chamado?

Você mesmo o está escrevendo:

Não é apenas um método de classe que é chamado, mas um método de um objeto específico.

Você também pode dizer que é aceitável:

method();

O que o método chama?

Ou seja, como se chama o método?

 
@Alexey Kozitsyn:

Essa é difícil. E uma entrada como...

Como você chama isso?

Você mesmo o escreve:

Você me diz que isso é permitido:

O que o método chama?

Ou seja, o que o método chama?

Veja a situação. Você tem problemas, não eu. O exemplo de Alexey parece incorreto para você, embora seja bastante claro e compreensível para mim.

--

A "entrada do tipo" é chamada de chamada ao método "método" do objeto "obj".

--

"Você também me dirá que tal registro é permissível" - a impressão é que você é quem escreve sobre tal coisa.

---

O método não chama nada. O método é chamado.

 
Dmitry Fedoseev:

Veja a situação. É você, não eu, quem está confuso. O exemplo de Alexei parece incorreto para você, embora me pareça claro e compreensível o suficiente, não me causou nenhuma dúvida, mas apenas me deu uma compreensão.

--

A "entrada do tipo" é chamada de chamada ao método "método" do objeto "obj".

--

"Você também me dirá que tal registro é permissível" - a impressão é que você é quem escreve sobre tal coisa.

---

O método não chama nada. O método é chamado.

O exemplo de Alexei é aceitável, mas não deveria, na minha opinião pessoal, ser um exemplo para os outros.

Você vê, você ainda não respondeu minha pergunta: o que inicia uma chamada de método de uma classe (ou de outra forma, o que invoca um método (não o que é invocado através de um método, mas o que/quem invoca o método em si))?

Qualquer método. É uma pergunta simples, você escreveu um artigo para iniciantes no OOP.

Um método não chama nada. O método é chamado.

Então com o que se chama isso?
 
Alexey Kozitsyn:

1. O exemplo de Alexei é aceitável, mas ele não deveria, na minha opinião pessoal, ser um exemplo para os outros.

2. Você vê, você ainda não respondeu minha pergunta: o que inicializa uma chamada de método de classe (ou de outra forma, o que invoca um método (não o que é invocado através de um método, mas o que/quem invoca o método em si))?

3. qualquer método. É uma pergunta simples, você escreveu um artigo para iniciantes no OOP.

1. Sugira seu próprio exemplo.

2. Sem resposta. Porque eu não sei do que estamos falando.

3. eu também não sei do que estamos falando.

 
void fun(){
   obj.method();
}
O método "método" do objeto "obj" é chamado a partir da função "diversão".
 
Dmitry Fedoseev:

1. Ofereça seu próprio exemplo.

2. Sem resposta. Porque eu não sei do que estamos falando.

3. eu também não sei do que estamos falando.

2. A discussão é sobre o que se chama o método de classe (não o método estático). O método da classe é chamado pelo objeto da classe ou de outra forma, o objeto da classe inicia a chamada do método da classe, por exemplo, este:

obj.method();   // obj - объект класса А, method() - метод класса А

Se o método for constante, ele não pode modificar o objeto pelo qual foi chamado, ou seja, o objeto objeto. Um objeto (por exemplo, obj2) passou para ele, por outro lado:

obj.method( obj2 );

pode ser modificado se passado por referência sem um modificador de constante. Isso é tudo.

Inicialmente eu não entendi as declarações do fórum "corefeys":

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

O que significa o modificador const const após a declaração do método

Combinador, 2016.01.31 20:32

Em C++ significa que o método não pode mudar os membros da classe, exceto para os membros declarados mutáveis.

Como na MQL não se pode obter tal coisa, isso significa que o método não pode mudar o objeto em princípio.

Ou

Fórum sobre Comércio, Sistemas Automatizados de Comércio e Testes de Estratégia

O que significa o modificador const const após a declaração do método?

Vasiliy Sokolov, 2016.02.01 11:55

Um método constante é outro exemplo do provérbio "tentamos fazer melhor, mas acabou sendo o mesmo de sempre". Acho que este é um lema para C++ em tudo. Não há nenhum uso prático, mas complica significativamente a concepção de programas OOP, pois é necessário controlar constantemente o tipo de objeto modificado (ele também deve ser constante).

ou

Bem, por que não pode fazer isso? Tudo muda perfeitamente. E a própria formulação é incorreta: um método constante não pode mudar os membros de uma instância de sua classe.

 
Vasiliy Sokolov:

Não estou negando. Sharpe é de fato uma linguagem perfeita, grande e bonita.

OK, digamos que você pode sempre escapar com const. Mas é melhor você explicar brevemente com um exemplo, o que dá const? Qual é a sua real utilidade? Por exemplo, e de preferência não escrito do nada.

Uma coisa é quando você escreve um projeto para si mesmo e o projeto inteiro em milhares - dezenas de milhares de cordas. É outra coisa quando se dá um projeto de milhões de linhas a um cliente e um Hindu Harikrishna está ali sentado sem nenhuma pista. Trabalhei com hindus de Bangalore, e o nível era na verdade mais baixo do que o dos nossos rapazes.

É como lá: eles treinam como programadores e levam o resto de seus parentes para o trabalho, e podem não saber absolutamente nada. Eles são ciganos.

E se o código crítico for embalado em uma libu, há menos chances de corrupção. Isso é o que eu penso.

 
Alexey Kozitsyn:

...

Por que não pode?! Tudo pode ser mudado muito bem. E a própria redação está incorreta: um método constante não pode mudar os membros de uma instância de sua classe.

Isto é o que quero dizer porque não estamos falando do tipo neste contexto. A "classe própria" é obviamente sua própria instância (ou seja, objeto).

 void bar(X& obj) const 
    {
        obj._x = 42; // Здесь меняем члена не своего класса OK! obj передается по ссылке и не имеет модификатора const
        _x = 42; // Попытка изменить члена своего класса ERROR!
    }

O membro_x pertence à mesma classe que o método da barra.

C obj._x - aqui o membro _x está em uma obj. de classe estrangeira.

Parece-me aceitável falar de uma classe em vez de uma instância, porque é óbvio que _x pertence à nossa classe, que escrevemos, e obj.x à classe estrangeira, com a qual lidamos.

Falando em terminologia OOP, toda a terminologia aqui é um pouco disso (ou mesmo muito disso).

 

Pessoalmente, sempre entendi os métodos constantes como métodos que não podem mudar as variáveis de classe.

Eu os usei muito raramente, porque muitas vezes encontrei uma situação em que uma redefinição de método requer a mudança de algo, enquanto o método básico é constante (já foi mencionado aqui).

Os métodos estáticos são amplamente utilizados. Em quase todas as classes complexas. Normalmente são métodos adicionais que "servem" e não requerem acesso às variáveis de classe.

Além disso, para constantes como "número de segundos em um dia" eu tento usar uma const const estática, em vez de #define. Neste caso, a declaração e inicialização de tal constante estão em locais diferentes, mas o controle de tipo ocorre e me ajuda mais de uma vez.