Mümkünse, bu başlatıcı listesi aracılığıyla veri üyeleri ayarlamanın daha iyi, Bu durumda, gölge üye isimlerinin argümanlarla ilgili bir problemi yoktur. Başka bir alternatif ise kurucunun gövdesinde this->foo = foo;
kullanılmasıdır. Setters için benzer bir sorun var, ancak şimdi başlatıcı listesi çözümünü kullanamazsınız. this->foo = foo;
ile takıldınız - ya da sadece argümanlar ve üyeler için farklı isimler kullanın.Bazı kişiler, gölge veri üyelerini gölgeleyen nefretlerden gerçekten nefret ederler; Birden çok kodlama standardı açıkça bunu asla yapmaz. Diğerleri ise bu tür bir gölgelendirmeyi düşünür, en azından kurucular ve ayarlayıcılar için, kedinin miyavıdır. Bir ya da iki kodlama standardını (ama hatırlatmıyorum), bu tür bir gölgelemeyi “yapmalı” (ama “olmaz”) pratiği olarak belirlediğimi hatırlıyorum. Bir son seçenek, okuyuculara işlevin ne yaptığına dair bir ipucu vermek, ancak uygulamadaki farklı isimleri kullanmak için işlev beyanındaki gölgelemeyi kullanmaktır.
Güncelleme: "Gölge" nedir?
#include <iostream>
void printi (int i) { std::cout << "i=" << i << "\n"; }
int i = 21;
int main() {
printi (i);
int i = 42;
printi (i);
for (int i = 0; i < 3; ++i) {
printi (i);
int i = 10;
printi (i);
}
printi (i);
}
i
, int i=10
en iç Bildirge ise sırayla küresel değişkeni i
gölgeler fonksiyon kapsamı en bildirilen değişken i
gölgeler for
açıklamada, bildirilen değişken i
gölgeler. sınıf A
gölge için varsayılan olmayan kurucu el altında probleminde
, argümanlar
x
,
y
,
width
ve
height
fikir tartışmalarının aynı isimdeki üye verileri. Sizin
width=width;
Sayfanız
width
argümanı
width
veri üyesini gölgeler (gizler) nedeniyle hiçbir şey yapmadı. Farklı kapsamlarda bildirilen aynı ada sahip iki veya daha fazla değişkeniniz olduğunda, kazanan her zaman en içteki kapsamıdır. Genel olarak, her zaman kazanacak en içteki kapsamı olan isimdir.
Euh, argüman adlarına bir 'a' ekleniyor mu? –
' A :: A (int xa, int, int, geniş, int heighta) – corazza
, zarif olmak istiyorsanız, * önceden * a, İngilizce belirsiz bir makale oluşturan: aX, aY, aWidth, aHaight' vb. Açıkçası, aynı tanımlayıcı aynı kapsamda iki farklı değişkene başvurmak için kullanılamaz. Cevabımı gör. –