BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Ellipsis Operatörü
 

Ellipsis Operatörü Ile Degisken Sayida Parametre Geçilmesi

   C dilinde degisken sayida ve/veya tipte parametre geçilmesi için ellipsis operatörü kullanilir. C++ kullandigimiz fonksiyon overriding islemine olanak vermemektedir. Ellipsis operatorü ,... seklinde tanimlanir.

   Ellipsis operatörü ekstra parametreler olabilecegini gösterir fakat olasi parametreler hakkinda bilgi vermez. Elipsis operatöründen önce en az bir parametre bulunmasi gerekmektedir. Bu parametre araciligiyla fonksiyona geçilen parametreler hakkinda bilgi edinilir. Elipsis operatörü degisken sayida parametereyi ifade ettiginden dolayi parametre listesindeki son token olmalidir.

   Degisken sayidaki parametreleri açiga çikarmak için   Stdargs.h veya Varargs.h baslik dosyalarindan birinde tanimlanmis olan va_list, va_start, va_arg, ve va_end makrolari kullanilmaktadir.

 

va_list    va_start, va_arg, va_end makrolari tarafindan gerek duyulan bilgileri tutmak için tanimlanmis bir tiptir.Degisken uzunluktaki parametre listesinde bulunan paremetrelere erismek için va_list tipinde bir nesne tanimlanmasi gerekmektedir.

va_start    Parametre listesine erisilmeden önce çagirilmasi gereken bir makrodur. va_arg, va_end makrolarinda kullanilmak üzere va_list ile tanimlanan nesneyi hazirlar.

va

va_arg    Parametere listesindeki parametreleri açiga çikaran makroduir. Her çagrilisinda va_arg möakrosu la_list ile tanimlana nesneyi listedeki bir sonraki parametreyi göstereceksekilde degistirir. Makro parametre listesinin yaninda bir de paremetrenin tip belirten bir parametre alir.

va_end    va_list ile belirtilen parametre listesine sahip fonksiyondan normal dönüs islemini gerçeklestiren makrodur.,

   Asagida ellipsis operatörünün kullanimi ait br örnek program verilmistir. Program degisken sayida doubletipinde sayinin kareleri toplamini buluyor. Fonksiyonun ilk parametresi parametre sayisini içeriyor.

 

 

#include <iostream.h>

 

#include <math.h>

 

#include <stdarg.h>

 

 

 

double KareToplam(int, ...);

 

 

 

void main(int argc, char *argval[],char *env[])

 

{

 

    cout << "Double sayilarin karelerinin toplamini alir";

 

    cout << " 10^2 + 20 ^2 + 5^2 = " << KareToplam(3, 10.0, 20.0, 5.0)<< endl;

 

}

 

 

 

double KareToplam(int sayi, ...)

 

{

 

    va_list parametreListesi;

 

    va_start(parametreListesi, sayi);

 

    double toplam = 0.0;

 

    for (int i = 0; i < sayi; i++)

 

        toplam += pow(va_arg(parametreListesi, double), 2);

 

    va_end(parametreListesi);

 

    return toplam;

 

}

 
 
  Bugün 116 ziyaretçi (166 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol