SORU
8 Ocak 2012, Pazar


Üye erişim operatörleri ->, . aşırı yükleme* (C )

Çoğu operatör yükleme, üye erişim operatörleri hariç*, , * .*->*1 vb anlıyorum.

Özellikle, iade edilmesi gereken operatör fonksiyonları bu ve geçti nedir?

Nasıl operatör function () örneğin operator->(...) üye yetkisine sahip olmanın ne olduğunu bilen var mı? Biliyor musun? Hatta bilmek gerekiyor mu?

Son olarak, dikkate alınması gereken herhangi bir sabit konular var? operator[] gibi bir şey aşırı örneğin, genel olarak, hem sabit hem de olmayan sabit bir sürüm gerekir. Üye erişim operatörleri ve sabit olmayan sabit sürümleri gerektirir mi?

CEVAP
9 Ocak 2012, PAZARTESİ


->

Bu gerçekten zor bir tek. Static bir üye işlev olması gerekir, ve herhangi bir argüman alır. Dönüş değeri üye arama gerçekleştirmek için kullanılır.

Eğer dönüş değeri bir sınıf türü bir işaretçi değil başka bir nesne ise, o zaman bir sonraki üye arama operator-> fonksiyonu tarafından işlenir. Bu "detaya davranış." olarak adlandırılır Dili son bir işaretçi döndürür kadar birlikte operator-> çağrıları zincirleri.

struct client
    { int a; };

struct proxy {
    client *target;
    client *operator->() const
        { return target; }
};

struct proxy2 {
    proxy *target;
    proxy &operator->() const
        { return * target; }
};

void f() {
    client x = { 3 };
    proxy y = { & x };
    proxy2 z = { & y };

    std::cout << x.a << y->a << z->a; // print "333"
}

->*

Bu tek bir özelliği var sadece çok zor.olmayan aşırısürüm işaretçisinin bir nesnenin Sol tarafta türü sınıf gerektirir ve sağdaki üye türü işaretçisi bir nesne. Ama aşırı zaman, istediğin değişkenleri alır ve istediğin her şeyi iade edebilirsiniz. Hatta static bir üye olmak zorunda değil.

Diğer bir deyişle, bu bir , - / gibi sadece normal bir ikili işleç olur. Ayrıca bakınız: Are free operator->* overloads evil?

.* .

Bu aşırı yüklenemez. Zaten yerleşik sol taraftaki sınıf olduğunda anlam türü vardır. Belki de küçük bir anlamda Sol tarafta bir işaretçi için onları tanımlamak mümkün olurdu, ama dil tasarım Komitesi yararlı daha kafa karıştırıcı olurdu karar verdi.

Aşırı yükleme ->, ->*, ., ve .* sadece dolgu durumlarda bir ifade olurdu, tanımlanmamış, hiç değişmiyor anlam ifade olurdu geçerli hiçbir aşırı yükleme.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006
  • Triune Films

    Triune Films

    9 ŞUBAT 2006