Tavior Section 16:时间与日期 C++继承了C语言中关于日期和时间的结构和函数,需要引用<ctime>,具体的函数目前用不上,以后用上再说 Section 17:输入输出 C++中有标准输出流cout,标准输入流cin,标准错误流cerr和标准日志流clog,具体的内容等到真正要上手写大型程序的时候再学习(正式的并行计算程序是需要输出报错信息的)
Tavior Section 18:结构 C与C++允许自定义的数据类型,使用struct语句 通过结构体变量访问结构成员时,使用成员访问运算符(.) 结构可以作为函数参数 可以定义指向结构的指针,与通常的指针类似,如 struct electron * struct_pointer; 为了使用上述指针访问指向结构内部的成员,需要用->运算符,如 struct_pointer -> mass; 另外,可以给结构类型创建一个别名,如以下定义(摘自我组的开源程序) typedef struct particle{ odouble xpos; odouble ypos; odouble px; odouble py; odouble pz; odouble gamm; odouble weight_nj; odouble ms; oint qs; olong code; ostruct particle *next; } PARTICLE; 此后就可以直接用PARTICLE来定义所有的这类结构体,而不需要再写一次struct particle了 注意:若不用typedef,则后面的PARTICLE本身是一个变量,直接调用结构体内容;但是使用typedef,后面的PARTICLE是一个结构体类型,在调用结构体前必须创建一个结构体变量PARTICLE *next #include<cmath> #include<cstddef> #define NUMBER 10 //超级简化版本 typedef struct particle{ //这里不加typedef会报错,因为后面声明的时候PARTICLE并不是一个类型 odouble xpos; odouble ypos; odouble px; odouble py; odouble pz; odouble gamm; odouble ms; oint qs; ostruct particle *next; } PARTICLE; PARTICLE *pvector(long nl, long nh) { PARTICLE *v; v = (PARTICLE *)malloc((size_t)((nh - nl + 1) * sizeof(PARTICLE))); //给粒子结构体分配内存 return v - nl; } int main() { PARTICLE *part, *head, *bottom; double ms = 1.0; double qs = 1.0; part = pvector(0, NUMBER - 1); for (int ip = 0; ip < NUMBER; ip++) { part[ip].xpos = part[ip].ypos = 0.0; part[ip].px = part[ip].py = part[ip].pz = 0.0; part[ip].gamm = sqrt(1+(pow(part[ip].px,2)+pow(part[ip].py,2)+pow(part[ip].pz,2))/pow(ms,2)); part[ip].ms = ms; part[ip].qs = qs; part[ip].next = part + ip + 1; //向后挪动一个particle结构体类型的长度,将地址赋给next } part[NUMBER - 1].next = NULL; head = part; //第一个粒子 bottom = part + NUMBER - 1; //最后一个粒子 return 0; } 类与结构体的区别: class中默认成员访问是private的,而struct中是public的 从class继承默认是private继承,而struct是public继承(继承是什么) class可以定义模板,而struct不可以(模板是什么)