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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值