'dan temel sınıftaki korumalı değişkene erişmek neden sorunlu Aşağıdaki parçacık beni şaşırtmış hissettiriyor. Der._x ++ neden doğrudur? Türetilmiş argümandan kopyalanan geçici bir yerel değişken olduğu için. Sadece halka üyelere erişilebilir olmalıdır. yorumlanmış ifade bs._x ++, hangisinin doğru olması gerektiğini geçemiyor. Lütfen yanlış anladığım yeri bildirin! Şimdiden teşekkür ederim!türetilmiş örnek
Nazik sorularınız için teşekkür ederiz. Ama benim şüphem der, argümandan kopyalanmış bir Türetilmiş nesnedir, başka bir deyişle, ilklendirilmiş Türetilmiş nesneyi kullanan bir müşteri olarak düşünülmelidir. Bu örnek değil, kopya oluşturucudan kaynaklanan başka bir geçici örnek değildir. _der
aynı Derived
sınıfın bir nesnedir ve Derived
sınıf içinde gelen _x
erişen çünkü
class Base
{
public:
Base(int x, int y) :_x(x), _y(y){}
protected:
int _x, _y;
};
class Derived :public Base
{
public:
Derived(int x, int y,int z) :Base(x,y), _z(z){}
void mem1(Base bs, Derived der) //copy constructor called. Derived::Derived(const Derived &)
{
der._x++;
//bs._x++;
_x++;
}
private:
int _z;
};
int main()
{
Derived der(6,4,3), der1(5,3,2);
Base bs(-5,-4);
der1.mem1(bs, der);
return 0;
}
Çünkü dil bu şekilde çalışıyor. Erişim sadece bu kişinin örneğine değil. – WhozCraig
'korumalı' tam olarak bunun için var. Korunan üyelere türetilmiş sınıflara erişilebilir, "özel" olamaz. –
türetilmiş sınıfın üst sınıfın üye değişkenine erişmesini istiyorsanız, lütfen bunları özel olarak işaretleyin. –