Yöntem bildiriminden sonra const değiştirici ne anlama geliyor? - sayfa 4

 
Dmitry Fedoseev :
Kendi değil, tamamen yabancı, sadece tipi aynı.

senin olmayan ne Ne tür aynı?

Sabit bir yöntemin başka bir sınıfı değiştiremeyeceğini mi söylüyorsunuz?

Ve cevap verdiğinizde lütfen daha detaylı yazın, ne demek istediğinizi anlamadım.

 
Alexey Kozitsyn :

senin olmayan ne Ne tür aynı?

Sabit bir yöntemin başka bir sınıfı değiştiremeyeceğini mi söylüyorsunuz?

Ve cevap verdiğinizde lütfen daha detaylı yazın, ne demek istediğinizi anlamadım.

Ne yazdığın belli değil, başkasının sınıfını her türlü ve kendisi gibi değiştirebilecek.
 

Basitse. Sabit bir yöntemde , bu sabit yöntemle aynı sınıfta bildirilen (veya ebeveyninde bildirilen) değişkenlerin değerlerini değiştirmek mümkün değildir. Böyle?

 
Dmitry Fedoseev :
Ne yazdığın belli değil, başkasının sınıfını her türlü ve kendisi gibi değiştirebilecek.

Hala yazdıklarını izleyebiliyor musun? Bu yöntem sınıfı nasıl değiştirebilir? Belki bir sınıf nesnesi ?

Ve soru açıklamadaydı:

Bir const yöntemi, sınıfının üyelerini değiştiremez.

Alexey neyi değiştirebileceğine dair bir örnek verdi, bu yüzden ifadenin doğru olmadığını düşünüyorum, Vasily'den bir yorum duymak istedim.

 
Alexey Kozitsyn :

Hala yazdıklarını izleyebiliyor musun? Bu yöntem sınıfı nasıl değiştirebilir? Belki bir sınıf nesnesi ?

Ve soru açıklamadaydı:

Alexey neyi değiştirebileceğine dair bir örnek verdi, bu yüzden ifadenin doğru olmadığını düşünüyorum, Vasily'den bir yorum duymak istedim.

Ya da belki daha düşünceli okuyacaksınız? - " bildirilen değişkenlerin değerlerini değiştir"

Alexei'nin ifadesi hakkında nasıl konuşulabilir? Sadece iddia etmekle kalmadı, aslında doğruladı, bir örnek verdi, onu editöre atabilir ve ne zaman derlendiğini ve ne zaman derlemediğini görebilirsiniz.

 
Dmitry Fedoseev :

Basitse. Sabit bir yöntemde , bu sabit yöntemle aynı sınıfta bildirilen (veya ebeveyninde bildirilen) değişkenlerin değerlerini değiştirmek mümkün değildir. Böyle?

Numara. Her sınıf nesnesinin, bu sınıfta bildirilen kendi değişken kümesine sahip olduğunun farkında mısınız? Ve sabit bir yöntem yalnızca çağrıldığı nesneyi (yani kümeyi) değiştiremez.
 
Alexey Kozitsyn :

Hala yazdıklarını izleyebiliyor musun? Bu yöntem sınıfı nasıl değiştirebilir? Belki bir sınıf nesnesi ?

..

Bunun gibi:

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

    

 
Alexey Kozitsyn :
Numara. Her sınıf nesnesinin, bu sınıfta bildirilen kendi değişken kümesine sahip olduğunun farkında mısınız? Ve sabit bir yöntem yalnızca çağrıldığı nesneyi (yani kümeyi) değiştiremez.
Peki ya meydan okuma? Önemli olan yöntemin ve değişkenlerin yeridir. Metot ve değişkenler aynı sınıfta yer alıyorsa, değiştirilmesi mümkün değildir. Sınıf bir parametre olarak referansla iletilirse, yapabilirsiniz.
 
struct X
{

int _x, _y;
    
void foo() const 
    {
        _x = 42 ; // ERROR! метод объявлен, как const, не можем менять члены 
        _y = 42 ; // ERROR! 
    }

     void bar( Z & obj) const 
    {
        obj._x = 42 ; // OK! obj передается по ссылке и не имеет модификатора const
        _x = 42 ; // ERROR!
    }

     void bar( Z const & obj) 
    {
        obj._x = 42 ; // ERROR! obj передается по ссылке, как const
        obj._y = 42 ; // ERROR! obj передается по ссылке, как const
        _x = 42 ; // OK! метод объявлен без const на сонце
    }

   
};
Böylece daha net olacaktır.
 
Dmitry Fedoseev :
Peki ya meydan okuma? Önemli olan yöntemin ve değişkenlerin yeridir. Metot ve değişkenler aynı sınıfta yer alıyorsa, değiştirilmesi mümkün değildir. Sınıf bir parametre olarak referansla iletilirse, yapabilirsiniz.
Buradaki çağrı, A sınıfının nesne1'i, A sınıfının sabit bir yöntemini çağırıyorsa, bu yöntem bu nesne1'i (yani onu çağıran nesne1'i) değiştiremez. Nesne1 aynı sabit yönteme başvurularak iletilirse, ancak A sınıfının nesne2'sinden çağrılırsa, nesne1 değiştirilebilir. Object2, sırayla değil.