top of page

C++ Dilinde Delegating Constructor

  • Writer: Yusuf Hançar
    Yusuf Hançar
  • Aug 13, 2023
  • 1 min read

C++ dilinde son yazılarımızda sınıf kavramı, özel üye fonksiyonlar ve kurucu işlevlerin farklı tasarımları ile kullanımlarına değinmekteyiz. Bu yazıların ama yapılacak tasarıma ve ihtiyaca göre dilin desteklediği yapıları kullanarak daha performanslı kod yazmaya destek olmaktır. Burada performans dediğimiz daha az kod ile daha verimli çıktı elde edebilmektir.

Bu yazımızda da bu performansı sağlayabilmek adına kod tekrarını azaltarak yapıcı fonksiyonun mantığını tek merkeze indirgeyerek sınıftaki değişiklikleri kolay yönetebilme için kullanılan 'delegating constructor' inceleyeceğiz. Bu özellik C++11 standartları ile dile eklenmiştir. Yani ihtiyaca göre oluşturulan kurucu işlevler arasında yönlendirme yapılarak ortak bir çağrı mantığı kurmak amaçlanacaktır.


class SmartCode{
private :
    const int val;
    
public:
    SmartCode(int x, int y, int z) : SmartCode (x * y * z) {}
    
    SmartCode(int x, int y) : SmartCode (x + y) {}
    
    SmartCode(int x) : val (x) {}
    
    void show_value()const
    {
        cout << val << " ";
    }
};

int main()
{
    SmartCode sc{ 23 };
    sc.show_value();

    SmartCode sc_1{ 23, 24 };
    sc_1.show_value();

    SmartCode sc_2{ 1, 3, 5 };
    sc_2.show_value();

    return 0;
}
*****************************
AÇIKLAMA : her kurucu işlev çağrısında tek parametreli kurucu işleve çağrı yapılarak ilgili işlemler yapılmaktadır. 
*****************************
CEVAP : 23 47 15
*****************************

ree

 
 
 

Recent Posts

See All
C++ Dilinde [[nodiscard]] attribute

C++’ta [[attribute]] (öznitelik) mekanizması, kod hakkında ek bilgi sağlayarak derleyicinin uyarılar vermesine, belirli optimizasyonlar...

 
 
 
C++ Dilinde constinit

C++20'de tanıtılan önemli bir özellik `constinit`'dir; bu özellik, statik depolama süresine sahip değişkenlerin derleme zamanında...

 
 
 

Comments

Couldn’t Load Comments
It looks like there was a technical problem. Try reconnecting or refreshing the page.
bottom of page