2012-06-03 17 views
8

C++ 'da OOP ile ilgili temel kavramları öğreniyorum ve mantıklı bir problemle karşılaştım.Nesne Yönelimli Programlama Mantığı

#include <iostream> 
#include <conio.h> 

using namespace std; 

class A { 
    int i; 
public: 
    void set(int x) { 
     i=x; 
    } 
    int get() { 
     return i; 
    } 
    void cpy(A x) { 
     i=x.i; 
    } 
}; 

int main() 
{ 
    A x, y; 
    x.set(10); 
    y.set(20); 

    cout << x.get() << "\t" << y.get() << endl; 
    x.cpy(y); 
    cout << x.get() << "\t" << y.get() << endl; 
    getch(); 
} 

Ben mümkün x.i [Satır 19], özel kapsamı aynı sınıfta bile sınırlı farklı object.Isn't özel bir üyesi olmanın erişmeye nedeni daha yukarıdaki kodda bilmek istedim Nesne bir parametre olarak geçti?

+1

o izin verilmedi eğer örnek olarak böyle bir ortak görev olurdu ne kadar çirkin düşünün. "Özel" noktası, "yabancı" _objects_'dan erişimi kısıtlamak değil, ancak _code_ kapsüllemek değildir. Ve bir sınıfa ait kod, hiç bir zaman belirli bir nesne ile hiç ilgilenmez, her bir statik olmayan üye fonksiyonuna dolaylı olarak aktarılan “bu” işaretçisi hariç. – leftaroundabout

cevap

13

private nesne için özel bir sınıf Özel değil, anlamına gelir. Her iki yorum da mümkün, aslında bazı diller diğerini seçti. Ancak çoğu dil, C++ gibi budur ve aynı sınıftaki nesnelerin başka bir kişinin özel üyelerine erişmesine izin verir.

0

cpy(A x) sınıfının bir üyesidir, private alanlarına ve yöntemlerine erişebilir.

private anahtar sözcüğü, alanlara erişmek için diğer sınıflardan (nesneler) gelenleri sınırlar. Bir sınıfa ait kodlar kendi özel üyelerine (alanlar veya yöntemler) erişebilir.

+1

Soru, verilen x nesnesindeki özel alana neden erişebildiğidir. Aynı sınıf olmasa bile, aynı nesne değildir. –

0

Bir sınıf kendi özel veri üyelerine erişebilir. İki veya daha fazla sayıda örneği (this ve bir şey parametre olarak geçirilen) Eğer nesnenin hem özel (ve kamu) değişkenler/yöntemleri

+0

Soru, verilen x nesnesindeki özel alana neden erişebildiğidir. Aynı sınıf olmasa bile, aynı nesne değildir. –

+0

@Truth cevabım zaten çok açık olduğunu belirtiyor ... Aslında bunu ilk yapan oydu. – Raekye

5

Değişkenler x erişebilir ve başa herhangi bir işlev varsa

Bu da demektir y, aynı sınıfın iki örneğidir. Onlar farklı nesnelerdir, ancak aynı sınıfına aittir. Bu yüzden özel üyeye üye işlevinden erişmek mümkün. C++

0

Nesne bir parametre olarak iletilse bile özel kapsam aynı sınıfla sınırlı değil mi?

Evet, bu sınıfın A aynı sınıf yani özel elemanı i erişen x oldu budur.

2

Sınıfın özel bir özelliği veya yöntemi, sınıf kapsamı dışında doğrudan erişilemediği anlamına gelir. Bu kamu yöntemleri için, özel üyelerin değerine erişebildiğimiz ve işleyebileceğimiz bir sınıf içinde tanımlanmıştır. doğrudan yerine bir halka yöntem aracılığıyla manipüle edilir nesneden 'i' erişmiyorsunuz Yukarıdaki örnekte

.

Böyle düşünün: Bir banka hesabınız var ve bankadaki paranız özel üye. Doğrudan bankaya gidip paranı kendin alamazsın. Bankadaki kasiyeri, özel mülke yani paranıza erişebilen bir kamu yöntemidir ve paranızı kasiyerinizde de kullanabilirsiniz.

İlgili konular