October 10, 2012

Merhaba,

Dün farkettim ki bir nesnenin üyesi "static" ise, nesne hükmünü yitirdiğinde bile değerini koruyor. Çünkü tıpkı "global variable" gibi program sonlanana kadar son değerini muhafaza ediyormuş. Bunu aşağıda, D dahil, C++ ve Java'da denedim. Özellikle C++'da sınıf dışında ek bir tanımla yapılması bunun bir kanıtı olsa gerek:
Alıntı ("D KODU"):

>
> import std.conv, core.stdc.stdio: printf;/*
> import std.stdio;//*/
>
> class staticMember {
>     public:
>         static int i;
> };
>
> //int staticMember.i;
>
> int main(string[] args) {
>     staticMember.i = args.length > 1 ? to!int(args[1]) : 9;
>
>     for(staticMember test = new staticMember; test.i > 1; test.i--) {
>         printf("%d", test.i); // print 98765432
>     }
>     printf("-new-");
>
> //test.i == 1:
>
>     //printf("%d", test.i);/*
>     staticMember test = new staticMember;//*/
>
>     printf("%d", test.i); // print 1
>     printf("-done-\n");
>
>     return 0;
> }
> ```

>
Alıntı ("C++ KODU"):
>
>
>

#include //*/
#include

class staticMember {
public:
static int i;
};

int staticMember::i;

int main(int argc, char *argv[] ) {
staticMember::i = argc > 1 ? atoi(argv[1]) : 9;

for(staticMember *test = new staticMember; test->i > 1; test->i--) {
    std::cout << test-> i; // print 98765432
}
std::cout << "-new-";

//test.i == 1:

//std::cout << test.i;/*
staticMember *test = new staticMember;//*/

std::cout << test->i; // print 1
std::cout << "-done-\n";

return 0;

}

>

Alıntı ("Java KODU"):

>
>
>
>
> class staticMember {
>     public
>         static int i;
> }
>
> class code {
>
>   public static void main(String[] args) {
>     staticMember.i = args.length > 0 ?  Integer.parseInt(args[0]) : 9;
>
>     for(staticMember test = new staticMember(); test.i > 1; test.i--) {
>         System.out.print(test.i); // print 98765432
>     }
>     System.out.print("-new-");
>
> //test.i == 1:
>
>     //System.out.print(test.i);/*
>     staticMember test = new staticMember();//*/
>
>     System.out.print(test.i); // print 1
>     System.out.print("-done-\n");
>   }
>
> }
> ```

>

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]