2010-05-24 23 views

cevap

19

Eski (nokta, .) bir nesnenin üyelerine erişmek için kullanılır, ikincisi (çift kolon, ::) ad alanı veya sınıf üyelerine erişmek için kullanılır.

Aşağıdaki kurulumu göz önünde bulundurun. Bu durumda

namespace ns { 
    struct type 
    { 
     int var; 
    }; 
} 

, bir ad alanının üyesi olan yapının, başvurmak için, sen :: kullanın. type türünde bir nesneye değişken erişmek için . kullanın.

ns::type obj; 
obj.var = 1; 
+0

, eğer bir şeye erişmek için nesne kullanıyorsak, o zaman nokta operatörünü kullanmalıyız, ve eğer bir sınıf adı kullanıyorsak, o zaman kullanmamız gerekecek ::, değil mi? sakıncası yoksa! – defiant

+0

@oDx, bu doğrudur, yani eğer bir sınıfın bir statik değişkenine veya fonksiyonuna sahipseniz, "::" öğesini sınıfın adıyla referans olarak kullanacaksınız, oysa bir üye fonksiyonunuz veya üye değişkeniniz varsa, kullanırsınız "." sınıfın bir örneğinin adıyla. –

1

bir nesne örneğine bir işaretçi kullanıyorsanız, kullandığınız nesnenin üyelerine erişmek gerekecek - "nokta" yerine>

+1

* Yapmanız gerekmez * - 'p-> m' sadece '(* p) .m';) için sözdizimsel şekerdir – fredoverflow

2

başka yolu da Quad düşünmek dot '::', scope resolution operator. 'dır. Kapsamda aynı ada sahip birden fazla nesne olduğu durumlarda. Açıkça hangisinin kullanılacağını beyan: ''

std::min(item, item2); 

veya

mycustom::min(item, item2); 

nokta operatörü O istendi değil

Myobject myobject; 
myobject.doWork(); 
myobject.count = 0; 
// etc 

bir nesne örneğinin metotlarını ve özelliklerini diyoruz, ama bir nesne örneği new ile dinamik olarak oluşturulursa kullanmak için başka operatör var etmektir, bu ok operatörüdür '->'

Myobject myobject2 = new Myobject(); 
myobject2->doWork(); 
myobject2->count = 1; 
İlgili konular