读书人

一个关于结构体的有关问题

发布时间: 2012-04-22 18:34:46 作者: rapoo

一个关于结构体的问题
有如下两个结构体

C/C++ code
struct Ran {        //均匀分布随机数生成器    Ullong u,v,w;    Ran(Ullong j) : v(4101842887655102017LL), w(1) {//Constructor. Call with any integer seed (except value of v above).        u = j ^ v; int64();        v = u; int64();        w = v; int64();    }    //Return 64-bit random integer    inline Ullong int64() {        u = u * 2862933555777941757LL + 7046029254386353087LL;        v ^= v >> 17; v ^= v << 31; v ^= v >> 8;        w = 4294957665U*(w & 0xffffffff) + (w >> 32);        Ullong x = u ^ (u << 21); x ^= x >> 35; x ^= x << 4;        return (x + v) ^ w;    }    //Return random double-precision floating value in the range 0. to 1    inline Doub doub() { return 5.42101086242752217E-20 * int64(); }    //Return 32-bit random integer.    inline Uint int32() { return (Uint)int64(); }};struct Normaldev : Ran {   //高斯分布随机数生成器    Doub mu,sig; //sig 标准差    Normaldev(Doub mmu, Doub ssig, Ullong i)    : Ran(i), mu(mmu), sig(ssig){}    Doub dev() {        Doub u,v,x,y,q;        do {            u = doub();            v = 1.7156*(doub()-0.5);            x=u- 0.449871;            y = fabs(v) + 0.386595;            q = SQR(x) + y*(0.19600*y-0.25472*x);            }            while (q > 0.27597&& (q > 0.27846 || SQR(v) > -4.*log(u)*SQR(u)));            return mu + sig*v/u;    }};

我想问能不能在定义一个Normaldev变量的时候不初始化,之后再进行?可以的话怎么做?
另外能不能讲解一下这种结构体中定义中包含结构体的?不明白。。能给出一些参考资料就更好了!


[解决办法]
完全可以定义一个Normaldev变量的时候不初始化的。其实这种初始化是由C++引入的。在C中是不支持这样的。你只需要将初始化的函数去掉就可以了。
结构体中定义中包含结构体的,你指的是struct Normaldev : Ran吗??这种类似于C++中的类的继承。你可以找本C++教材参考下。

读书人网 >C++

热点推荐