2 Mart 2014 Pazar

C++ ve Operator

Giriş
C++ ile bir sınıfa tanımlanabilecek çok sayıda operator var. Aşağıda notlarım var.

== (Eşitlik) operatörü
Eşitlik operatörü iki şekilde kullanılabiliyor. Bunlar sınıfın == metodu olarak tanımlanması veya global bir metod olarak tanımlanması.

Sınıfın İçine Tanımlama
Metod parametresi ve metodun kendisi const olmalı
Örnek 
bool operator == (const ContourEdgeIndexes& rhs) const {} 
Global Tanımlama
Örnek:
bool operator == (var const& v1, var const& v2)
{
return (v1.name == v2.name) && (v1.value == v2.value);
}
= (Değer Atama )operatörü

std::pair için özel tanımlanmış  = operatörü bulunuyor.

Bu atama operatörü ile
std::pair <int,int> bar = std::make_pair (10.5,'A'); //ok: implicit conversion from pair<double,char>
yapılabilir.

-> operatörü
Bir sınıfı sarmalayan başka bir sınıf için tanımlanır.

MyObject* MyWrapper::operator -> ()
{
  return m_ptr;
}
++operatörü
Bu operatör aşağıdaki gibi tanımlanabilir.
Eğer pointer bir sınıfa pointer varsa ve ++operatörünü çağırmak istiyorsak aşağıdaki gibi yapabiliriz.
std::atomic_uint64_t* counter;
counter->operator++();
Dönüşüm Operatörleri
Dönüşüm operatörleri ile sınıfın içindeki bir alan dışarıya açılır veya dönüştürülerek kullanılır.

File operatörü
Örnek:
class File_ptr{
FILE* p;
public:
File_ptr(const char* n, const char* a){p = fopen(n, a);}
File_ptr(FILE* pp) { p = pp; }
~File_ptr() {fclose(p);}
operator FILE* () {return p;} 
};

C++11 ile dönüşüm operatörünün rvalue ile kullanılmamasını sağlamak için aşağıdaki gibi yapılabilir.
operator FILE* () & { return p; }
// Note this -----^

Hiç yorum yok:

Yorum Gönder