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

 
Alexey Kozitsyn :
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.

Bir nesne bir yöntemi nasıl çağırabilir? Bir metot, bir fonksiyondan veya başka bir metottan çağrılabilir.

Yalnızca bir sınıf yöntemi değil, belirli bir nesnenin yöntemi de çağrılır. Sınıfın kendisi bir soyutlamadır.

 
Dmitry Fedoseev :

Bir nesne bir yöntemi nasıl çağırabilir? Yöntem, bir işlevden veya başka bir yöntemden çağrılabilir.

Yalnızca bir sınıf yöntemi değil, belirli bir nesnenin yöntemi de çağrılır. Sınıfın kendisi bir soyutlamadır.

İşte bir teneke. Ve bir rekor gibi

obj.method();

buna ne denir

Sen kendin yaz:

Yalnızca bir sınıf yöntemi değil, belirli bir nesnenin yöntemi de çağrılır.

Ayrıca böyle bir kaydın kabul edilebilir olduğunu söylüyorsunuz:

method();

Yöntem neyi çağırır?

upd: yani yöntem nasıl denir?

 
@Alexey Kozitsyn :

İşte bir teneke. Ve bir rekor gibi

buna ne denir

Sen kendin yaz:

Ayrıca böyle bir kaydın kabul edilebilir olduğunu söylüyorsunuz:

Yöntem neyi çağırır?

upd: yani yöntem nasıl denir?

Duruma bak. Senin yanlış anlamaların var, benim değil. Alexey'nin örneği size doğru görünmüyor, ama bana oldukça açık ve anlaşılır görünüyor, benden soru sormadı, sadece anlayış verdi.

--

"Bir tür kayıt" - "obj" nesnesinin "yöntem" yöntemine yapılan çağrı olarak adlandırılır.

--

"Hala böyle bir kaydın kabul edilebilir olduğunu söylüyorsunuz" - izlenim, bunun hakkında yazdığınız yönünde.

---

Yöntem hiçbir şey çağırmaz. Yöntem denir.

 
Dmitry Fedoseev :

Duruma bak. Senin yanlış anlamaların var, benim değil. Alexey'in örneği size doğru görünmüyor, ama bana oldukça açık ve anlaşılır görünüyor, benden soru sormadı, sadece anlayış verdi.

--

"Bir tür kayıt" - "obj" nesnesinin "yöntem" yöntemine yapılan çağrı olarak adlandırılır.

--

"Hala böyle bir kaydın kabul edilebilir olduğunu söylüyorsunuz" - izlenim, bunun hakkında yazdığınız yönünde.

---

Yöntem hiçbir şey çağırmaz. Yöntem denir.

Alexei örneği oldukça kabul edilebilir, ancak benim kişisel görüşüme göre başkalarına örnek olmamalıdır.

Görüyorsunuz, hala sorumu yanıtlamadınız: bir sınıf yöntemine çağrıyı ne başlatır (veya başka türlü, yöntemi ne çağırır (yöntem tarafından çağrılan şey değil, yöntemin kendisini ne/kim çağırır))?

Herhangi bir yöntem. Basit bir soru, OOP'ta yeni başlayanlar için bir makale yazdınız.

Yöntem hiçbir şey çağırmaz. Yöntem denir.

Neyle anılır?
 
Alexey Kozitsyn :

1. Alexei örneği oldukça kabul edilebilir, ancak benim kişisel görüşüme göre başkalarına örnek olmamalıdır.

2. Görüyorsunuz, hala sorumu yanıtlamadınız: sınıf yöntem çağrısını ne başlatır (veya başka türlü, yöntemi ne çağırır (yöntem tarafından çağrılan şey değil, yöntemin kendisini ne/kim çağırır))?

3. Herhangi bir yöntem. Basit bir soru, OOP'ta yeni başlayanlar için bir makale yazdınız.

1. Örneğinizi sunun.

2. Cevap vermedi. Çünkü konuşmanın ne hakkında olduğu hiç belli değil.

3. Ayrıca konuşmanın ne hakkında olduğu da belli değil.

 
void fun(){
   obj.method();
}
"obj" nesnesinin "yöntemi" yöntemi, "eğlence" işlevinden çağrılır.
 
Dmitry Fedoseev :

1. Örneğinizi sunun.

2. Cevap vermedi. Çünkü konuşmanın ne hakkında olduğu hiç belli değil.

3. Ayrıca konuşmanın ne hakkında olduğu da belli değil.

2. Sınıf yönteminin ne olduğu hakkında konuşun (statik bir yöntem değil). Bir sınıf yöntemi, bir sınıf nesnesi tarafından çağrılır veya başka bir şekilde, bir sınıf nesnesi, aşağıdaki gibi bir sınıf yöntemine çağrı başlatır:

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

Yöntem sabitse, çağrıldığı nesneyi değiştiremez, yani. nesne nesnesi. İçine aktarılan nesne (örneğin, obj2):

obj.method( obj2 );

const değiştiricisi olmadan referansla iletilirse değiştirilebilir. Bu kadar.

Başlangıçta forumun "corefeevs" ifadelerini anlamadım:

, bir sınıfın üyelerini değiştiremeyeceği anlamına gelir .

Çünkü MQL'de böyle bir yaban turpu için bekleyemezsiniz, bu da prensipte yöntemin nesneyi değiştiremeyeceği anlamına gelir.

veya

Sabit yöntem , "en iyisini istedik, her zamanki gibi ortaya çıktı" atasözünün bir başka örneğidir. C++ için genel olarak sloganın bu olduğunu düşünüyorum. Pratik bir faydası yoktur, ancak OOP programlarının tasarımını önemli ölçüde karmaşıklaştırır, çünkü değiştirilen nesnenin türünü kontrol etmek için sürekli olarak gereklidir (sabit olmalıdır) .


veya

Neden yapamıyor? Her şey güzelce değişir. Ve burada ifadenin kendisi doğru değil: sabit bir yöntem, sınıfının bir örneğinin üyelerini değiştiremez.

 
Vasiliy Sokolov :

inkar etmiyorum. Sharpe gerçekten de mükemmel, harika ve güzel bir dildir.

Diyelim ki const ile her zaman çıkabilirsiniz. Ancak const'ın ne verdiğini bir örnekle kısaca açıklamak daha iyidir? Gerçek faydası nedir? Bir örnekte ve tercihen emilen bir parmaktan değil.

Kendiniz ve tüm proje için binlerce - on binlerce satır yazdığınızda bu bir şeydir. Başka bir şey, bir proje milyonlarca satır uzunluğunda ve müşteriye teslim edildiğinde ve ayağıyla dişinde olmayan Hindu Harikrishna'nın orada oturuyor. Bangalore'lu Kızılderililerle çalıştım, seviye bizimkilerden gerçekten daha düşüktü.

Aynı yerde, nasıl - biri programcı olmayı öğrenmemiş, akrabalarının geri kalanını işe sürüklüyor ve hiçbir şey bilmiyor olabilirler. Çingeneler.

Ve kritik kod bir kitaplıkta paketlenirse, daha az hasar olasılığı vardır. Bende öyle düşünüyorum.

 
Alexey Kozitsyn :

...

Neden yapamıyor? Her şey güzelce değişir. Ve burada ifadenin kendisi doğru değil: sabit bir yöntem, sınıfının bir örneğinin üyelerini değiştiremez.

Anlatılmak istenen budur çünkü bu bağlamda tip tartışılmaz. "Kendi sınıfı" - örneğinin (yani nesne) olduğu açıktır.

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

_x üyesi, bar yöntemiyle aynı sınıfa aittir.

C obj._x - burada _x üyesi yabancı nesne sınıfındadır.

Bir örnekten değil de bir sınıftan bahsetmek bana mantıklı geliyor, çünkü _x'in yazdığımız sınıfımıza ve obj.x'in işlediğimiz bir yabancıya atıfta bulunduğu açık.

OOP terminolojisi hakkında konuşursak, tüm terminoloji bundan biraz (hatta çok) oluşur.

 

Şahsen, const yöntemlerini her zaman sınıf değişkenlerini değiştiremeyen yöntemler olarak anladım.

Çok nadiren kullandım - çünkü bir yöntemi geçersiz kılarken bir şeyin değiştirilmesi gerektiği ve temel yöntemin sabit olduğu bir durumla birden fazla kez karşılaştım (burada daha önce bahsedilmişti).

Statik yöntemleri yaygın ve yoğun bir şekilde kullanırım. Pratik olarak herhangi bir zor sınıfta. Genellikle bunlar, sınıf değişkenlerine erişim gerektirmeyen "hizmet" ek yöntemleridir.

Ayrıca, "bir günde saniye" gibi sabitler için #define değil statik const yapısını kullanmaya çalışıyorum. Aynı zamanda, böyle bir sabitin bildirimi ve başlatılması farklı yerlerdedir, ancak diğer yandan, bir kereden fazla bana yardımcı olan tip kontrolü gerçekleşir.

Neden: