D語言遊戲編程(7):D語言基礎之struct

    D語言的struct是一個簡單的數據集合。它屬於值類型;它不支持構造、析構函數,不支持虛函數,不支持繼承,如果需要這些特性,則應該使用class。D語言的struct能實現所有C語言的功能。按照C++的屬於,D語言的struct屬於“Plain Old Data”類型。
    下面是一些D語言的特性的演示代碼。

import std.stdio;

void main()
{
    tryStructs();
}


void tryStructs()
{
    
// 和C#類似,class是引用類型,而struct是值類型
    
    
// static initialization
    
//----------------------------------
    struct X
    
{
        
int a;
        
int b = 99;
    }

    
    X x;    
// x.a調用默認初始化,值爲0,x.b初始化爲我們指定的值--99
    writefln("x.a = ", x.a, ", X.b = ", x.b);
    
    
static X x2 = {a:5, b:6}// D的一種初始化方式
    static X x3 = {56}// C風格的初始化
    
    
// dynamic initialization
    
//------------------------------------
    struct S
    
{
        
float x;
        
float y;
        
        
static S opCall(float s)
        
{
            S r;
            r.x 
= r.y = s;
            
return r;
        }

        
        
static S opCall(float _x, float _y)
        
{
            S r;
            r.x 
= _x;
            r.y 
= _y;
            
return r;
        }

    }

    S s1;
    s1.x 
= 0;
    s1.y 
= 1;
    
    
// struct 不支持構造函數,使用opCall可以方便書寫
    S s2 = 9// 調用opCall
    writefln("s2.x = ", s2.x, ", s2.y = ", s2.y);
    
    S s3 
= (5,6); //調用opCall
    s3 = S(8,9);
    writefln(
"s3.x = ", s3.x, ", s3.y = ", s3.y);
    
    
// struct properties
    
//---------------------------------
    writefln("sizeof = ", s3.sizeof,
            
", alignof = ", s3.alignof,
            
", tupleof = ", s3.tupleof,
            
", offset of x = ", S.x.offsetof,
            
", offset of y = ", S.y.offsetof);
            
    
// union
    
//------------------------------------
    union U
    
{
        
int n;
        
float f;
    }

    
    
static U u1 = {f:1.0f};
    writefln(
"u1.f = ", u1.f,
            
", u1.n = ", u1.n);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章