2010-10-29 24 views
12

Bir sınıfın < < operatörünü aşırı yükledim. Aşağıdaki gibi, işaretçilerde kullanmak istersem operatörü aşırı yüklemem gerekir mi?İşaretçilerdeki aşırı yüklenmiş operatörleri kullanma

class A { 
    std::string operator<<(std::string&); 
} 

aInst << "This works"; 
aPointer << "This doesnt work"; 
aPointer->operator<<("Whereas this works but is useless"); 

Umarım bana yardımcı olabilirsiniz.

heinrich

cevap

23

Önce pointer KQUEUE gerekir. Aşağıda Andre'nin çözüm de çalışılabilir, ama söylediği gibi iyi bir fikir olmayabilir:

A *ptr = new A(); 
(*ptr) << "Something"; 

diğer tek yolu

Edit yukarıda açıklanan yoludur.

3

Bunu yapamazsınız. Operatör fonksiyonları sadece aralarında numaralandırma veya sınıf türleri olan işlenenler için dikkate alınır.

Her şeyden sonra, bir işaretçi, ancak bir sınıf kaydırın. İlk önce işaretçiyi işaretleyerek bir sınıf nesnesine geçmek istediğinizi açıkça belirtmeniz gerekir.

+0

@sbi, teşekkürler. –

+0

düzeltildi (Not "sınıf türleri" yapıları ve birlikleri kapsar.) – sbi

+0

@sbi düzeltildi. Yapılar ve sendikalar derslerdir. "Sınıf" sınıfı anahtarla bildirilen sınıflar için, yapı ve birlikler uygun bir operatörün işlenenleri olduğunda, işleç işlevleri dikkate alınır. –

0

Normalde bunun için iyi bir neden yoktur, çünkü semantik olarak işleç < < akış nesnesine başvuru döndürür. Ve teknik olarak bunu yapamazsın.

+2

Hayır, semantik olarak işleç << << sol taraftaki argümanı döndürmelidir. –

10

Öncelikle, standart sözleşmeler ile sopa, senin operator<< böyle beyan edilmelidir:

Şimdi
class A { 
    A& operator<<(const std::string&); 
}; 

, teknik olarak aşağıdaki küresel işlevi uygulayarak ne istiyorsan bölümünü beceriksizle olabilir:

A * operator<< (A * a, const std::string& s) { (*a) << s; return a; } 

Bu gibi beyanlara izin verecek:

Ancak, aşağıdaki yazmak için mümkün olmayacaktır: Her durumda

aPointer << "this will not compile."; 

, böyle bir operatöre yazılı en iyi ihtimalle, kafa karıştırıcı olurdu. Sen

(*aPointer) << "this will be printed."; 

daha basit sözdizimi ile yaşamak ve kodunuzu okumak için (birkaç hafta içinde ve kendini,) başkalarını izin kurulan sözleşmelere yapışır kod yazmak gerekir.

İlgili konular