25 Ekim 2017 Çarşamba

Member and Pointer Operators

Giriş
C++'ta kullanılabilen Member and Pointer Operators toplam 7 tane. Bütün metodlar gibi bu operatörler istenirse virtual olabiliyorlar.

1. Subscript veya Bracket operator
a [b] şeklindedir.
Bracket operator tek boyutludur. Çift boyutlu operator [][] şeklinde bir operator yoktur!

Şöyle tanımlanır.
const int & MyClass::operator [] (int i)const {...} //accessor
int & MyClass::operator [] (int i) {...} //mutator
Şöyle kullanırız.
MyClass c;
cout << c[2] << endl;
2. Indirection operator
*a şeklindedir.
Aynı zamana dereference operator olarak ta bilinir.Bu metod lvalue ya da rvalue için tanımlanabilir.
Derefence operator elimizde pointer olmayan nesneye *() şeklinde erişim ile tetiklenir.

Şöyle yaparız. Bu durumda sınıfımıza yazdığımı *operator () metodu tetiklenir.
Person p;
auto v = *p;
Elimizde this olsaydı şöyle yapardık.
std::string str = *(*this);
Örnek
Şöyle yaparız. Burada 3 tane metod var. İlk ikisi lvalue için kullanılır. Sonuncusu ise rvalue için kullanır.
T const& operator *() const& ;
T&       operator *() & ;
T&&      operator *() && ;
lvalue örneklerini anlamak kolay. const lvalue için
const A a = A();
*a;
const olmayan lvalue için
A a;
*a;
const olmayan rvalue için
*A();
Örnek
Derefence operator ve pointer arasındaki farkı görmek için şöyle yaparız.
Person *ptr = new Person;
Person p1 = *ptr;   // does not invoke * operator
string str = *p1 // invokes the overloaded operator as it is called on an object.
3 Address-of operator
&a şeklindedir.

4. Structure dereference operator
a->b şeklindedir.


5.Structure reference operator
a.b şeklindedir. C++'ta bu operator overload edilemez. Açıklaması şöyle
Operator . (dot) could in principle be overloaded using the same technique as used for ->. However, doing so can lead to questions about whether an operation is meant for the object overloading . or an object referred to by .
This problem can be solved in several ways. At the time of standardization, it was not obvious which way would be best
6. Member selected by pointer-to-member b of object pointed to by a operator
a->*b şeklindedir.

7.Member of object a selected by pointer-to-member b operator
a.*b şeklindedir.

Hiç yorum yok:

Yorum Gönder