Hatalar, hatalar, sorular - sayfa 1055

 
zfs :
Profilinizde Servis Masasını bulun.
Sayesinde!
 
A100 :
Burada bir çelişki yoktur, aksi takdirde B aşağıda gösterildiği gibi C.t'ye erişebilir, B ise C'nin bir türevi değildir.
Örneğinizde B'nin Ct'ye erişimi olmalıdır ve bunu yasaklamak için hiçbir neden göremiyorum.
 
Zloy_Koldun :
Örneğinizde B'nin Ct'ye erişimi olmalıdır ve bunu yasaklamak için hiçbir neden göremiyorum.

İkiniz de tuhafsınız. Sınıfları ve örnekleri karıştırıyorsunuz. Benim için, aynı B sınıfının başka bir örneğinin t'sine erişim olmamalıdır.

Korunan alanlar yalnızca kendilerine ait olmalıdır (aynı B örneğinin, yani bunun) ve başka bir örnek (aynı B sınıfından bile) kapatılmalıdır .. Açıklık için yeniden adlandıralım:

 class Человек
{
protected :
   int кошелёк;
};
class Мужчина : public Человек
{
   int fч( Человек& ч );
   int fм( Мужчина& м );
};
int Мужчина::fч( Человек& ч )  // 1
{
   кошелёк = 100 ;       // Всё в порядке .  моё.
   int s =  ч.кошелёк;   // protected member access error  вполне справедливо
   return s;
}
int Мужчина::fм( Мужчина& м )  // 2
{
   кошелёк = 100 ;       // Всё в порядке , кошелёк мой собственный
   int s = м.кошелёк;   // это компилируется.  и это НЕПРАВИЛЬНО! кошелёк ЧУЖОЙ !!
// С фига ли я должен иметь доступ к твоему кошельку, только на основании того что мы с тобой оба "Мужчины" ?? 
   return s;
}

Onlar. benim için - her iki işlev de derlenmemeli, yalnızca birincisi değil. C++'da ikincisi derlenir ve çalışırsa, bu bir erdem değil, bir C++ hatasıdır.

Kısaca konuşmak gerekirse:

 class Человек
{
protected :
   int кошелёк;
public :
   void Человек() {  a= 3 ; }
   void gч( Человек& ч )
   {
    ч.кошелёк--;   // Даже это не должно компилироваться.  не следует лазить в чужой кошелёк!
    кошелёк++;    // в свой можно
   }   
};
 

Bir cüzdan ile karşılaştırmanız yanlış.

Korumalı üyelere erişimin gerekli olduğu bir örnek verebilirim, ancak bu benim veya sizin tercihlerinizle ilgili değil.

Programcı bir şeyi yasaklamak isterse, bunu kendisi yapabilir ve derleyici yasaklamalıdır,

eğer programı bozabilirse.

Yukarıdaki örnekte, B sınıfı A sınıfını biliyor, bu yüzden orada hiçbir şeyi mahvetmeyecek.

Ve devre dışı bırakmak istiyorsanız, Private bölümüne koyun veya bir sınıftan miras almayın veya binlerce başka yol düşünün.

 
MetaDriver :


Onlar. benim için - her iki işlev de derlenmemeli, yalnızca birincisi değil. C++'da ikincisi derlenir ve çalışırsa, bu bir erdem değil, bir C++ hatasıdır.

O zaman cüzdanınıza erişim de reddedilir.
Человек ч;
ч.gч( ч );
 
A100 :
O zaman cüzdanınıza erişim de reddedilir.

Bir kez daha: sınıflar (türler) ve örnekler (değişkenler) arasında dikkatli bir şekilde ayrım yapın. Kendi (bu) korumalı alanlar, miras alınırken (özel olanların aksine), yabancı (aynı sınıftaki diğer değişkenler) mevcut olmamalıdır dahil olmak üzere serbestçe kullanılabilir. (mevcut olmamalı)

Zloy_Koldun :
.....

Yukarıdaki örnekte, B sınıfı A sınıfını biliyor, bu yüzden orada hiçbir şeyi mahvetmeyecek.

..................

Cüzdanınız olduğunu biliyor olmam ona erişmem için bir sebep değil. Seninkine lütfen. Sizinkine - yalnızca get() ve set() aracılığıyla - izin verirseniz (public: int get(); int set();).

 
MetaDriver :


korumalı erişimi nesne düzeyinde değil, sınıf düzeyinde kısıtlar, çünkü derleme sırasında nesneler hakkında bilgisi yoktur. çelişki örneği verdim
Человек ч;
ч.gч( ч );
nesne aynı
 
MetaDriver :

Cüzdanınız olduğunu biliyor olmam ona erişmem için bir sebep değil. Seninkine lütfen. Sizinkine - yalnızca get() ve set() aracılığıyla - izin verirseniz (public: int get(); int set();).

Cüzdan sadece özel bir durum. Ve kimse onu özel bir yere koyma zahmetinde bulunmuyor.

Başka bir durumda, başka bir nesnenin üst sınıfının bir değişkenine erişmeniz gerekebilir.

Ve buna izin verip vermemeye karar vermek programcıya kalmış. Ve derleyici, programın doğru çalışmasını sağlamalıdır.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
A100 :
Çelişki örneği verdim..nesne aynı

Çelişki yok. Kendinize "dış arayüz" aracılığıyla atıfta bulunuyorsanız - kendinizle yüzleşmeye hazır olun. ;)

........... çünkü derleme zamanında .

 
Zloy_Koldun :

1. Cüzdan sadece özel bir durumdur. Ve kimse onu özel bir yere koyma zahmetinde bulunmuyor.

2. Başka bir durumda, başka bir nesnenin üst sınıfının bir değişkenine erişmeniz gerekebilir.

3. Ve buna izin verip vermemeye karar vermek programcıya kalmıştır.

4. Derleyici de programın doğru çalışmasını sağlamalıdır.

1. Özel bölüme yerleştirme, bu durumda hiçbir şeyi değiştirmeyecektir.

 class Человек
{
private :
   int кошелёк; 
public :
   void Человек() {  кошелёк= 3 ; }
   void gч( Человек& ч )  
   { 
    ч.кошелёк--;   // сейчас работает.  а не должно ;)
   }
};

Mirasta değişecek, açık.

2. Herkesin ihtiyaç duyacağı birkaç şey ... nedeni yalnızca kendi kopyalarına erişirken.

3. Bırak o karar versin. Doğru şekilde. ;)

4. Bütün soru şudur: Tam olarak neyin "doğru iş" olarak kabul edildiği.