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.
*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.
Şöyle yaparız. Burada 3 tane metod var. İlk ikisi lvalue için kullanılır. Sonuncusu ise rvalue için kullanır.
Derefence operator ve pointer arasındaki farkı görmek için şöyle yaparız.
&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
a->*b şeklindedir.
7.Member of object a selected by pointer-to-member b operator
a.*b şeklindedir.
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çinconst A a = A();
*a;
const olmayan lvalue içinA a;
*a;
const olmayan rvalue için*A();
ÖrnekDerefence 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
6. Member selected by pointer-to-member b of object pointed to by a operatorOperator . (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
a->*b şeklindedir.
7.Member of object a selected by pointer-to-member b operator
a.*b şeklindedir.