SORU
22 Mart 2009, Pazar


C : sınıf veri üyesi için İşaretçi

İyi derler: bu garip bir kod parçası buldum

class Car
{
    public:
    int speed;
};

int main()
{
    int Car::*pSpeed = &Car::speed;
    return 0;
}

NedenC sınıfının statik olmayan veri üyesi için bu işaretçi var mı?Nebu garip işaretçi kullanın gerçek kodudur?

CEVAP
22 Mart 2009, Pazar


"Aşağıdaki kod kullanımını gösterir: . "üye işaretçi bir

#include <iostream>
using namespace std;

class Car
{
    public:
    int speed;
};

int main()
{
    int Car::*pSpeed = &Car::speed;

    Car c1;
    c1.speed = 1;       // direct access
    cout << "speed is " << c1.speed << endl;
    c1.*pSpeed = 2;     // access via pointer to member
    cout << "speed is " << c1.speed << endl;
    return 0;
}

Gibinedeniyi karmaşık sorunları çözmek yönlendirme başka bir seviye için ne yapmak istersiniz. Ama dürüst olmak gerekirse, hiçbir zaman kendi kodumu onları kullanmak zorunda kaldım.

Düzenleme:Hemen üye veri işaretçileri için ikna edici bir kullanım düşünemiyorum. Üye işlev işaretçisi takılabilir mimarilerde kullanılan olabilir, ama bir kez daha küçük bir alanda bir örnek üreten ve beni yendi. Aşağıdaki (denenmemiş) benim en iyi deneyin - bazı ön ve bir nesne için kullanıcı tarafından seçilen bir üye fonksiyonu uygulamadan önce işlem sonrası olacağını işlevi Uygulamak

void Apply( SomeClass * c, void (SomeClass::*func)() ) {
    // do hefty pre-call processing
    (c->*func)();  // call user specified function
    // do hefty post-call processing
}

c->*func etrafında parantez ->* operatör işlev çağrısı operatörü daha düşük bir önceliğe sahip olduğundan, gereklidir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jonah Penna

    Jonah Penna

    11 EYLÜL 2005
  • schmittastic

    schmittastic

    9 EYLÜL 2009
  • TheMasterOfHell100

    TheMasterOfH

    13 AĞUSTOS 2011