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);
}

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