GEANT4学习 第一节 C++知识的准备
G4是基于C++编写的,要学习G4,需要很多C++的知识,特别是class和object的知识。
关于C++的基础语法这里就不过多谈了,可以看一看网上的教程。
C++教程
本文也大量引用了这个教程的知识。
这里只讲一下class和object的知识。
class和object是什么?
class (类)、object (对象)
类其实指的是一个特定的数据蓝图,我觉得可以这样通俗的理解类和对象:
例如我们要在程序中大量的使用同一个格式的数据块,举个粒子,这个数据块是“狗”,
“狗” 这个数据块有如下的性质和功能:
class 狗
{
性质: 毛色;
身长;
速度;
功能: 向左;
向右;
坐下;
void 向左()
{
让狗子向左一步
}
void 向右()
{
让狗子向右一步
}
void 坐下()
{
让狗子坐下
}
}
当我有一只叫做“来福”的狗的时候,我可以申明这个“来福”。来福就是object。
//申明
狗 来福;
//使用.来访问这个类的成员
来福.毛色 = 红色;
来福.身长 = 100 cm;
来福.速度 = 5m/s;
来福.向左();
来福.向右();
来福.坐下();
这样来写,会让整个程序的结构十分漂亮,逻辑严密,打包之后别人也方便使用。
定义
类定义是以关键字 class 开头,后跟类的名称。
比如:
class Box
{
public:
double length; // 盒子的长度
double breadth; // 盒子的宽度
double height; // 盒子的高度
};
类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。下面的语句声明了类 Box 的两个对象。
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
访问成员
类的对象的公共数据成员可以使用直接成员访问运算符 (.) 来访问。为了更好地理解这些概念,让我们尝试一下下面的实例:
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
int main( )
{
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
double volume = 0.0; // 用于存储体积
// box 1 详述
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 2 详述
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// box 1 的体积
volume = Box1.height * Box1.length * Box1.breadth;
cout << "Box1 的体积:" << volume <<endl;
// box 2 的体积
volume = Box2.height * Box2.length * Box2.breadth;
cout << "Box2 的体积:" << volume <<endl;
return 0;
}
G4中常用的一些C++的知识
:: 范围解析运算符
用于在类外定义成员函数
public protect private 类访问修饰符
用于在类成员的访问属性,protect和private只能类内访问
构造函数 & 析构函数
构造函数 会在申明新对象时被调用,
析构函数 会在每次删除所创建对象的时候被调用,用于释放资源。class Line { public: Line(double len); // 这是构造函数 ~Line(double len); // 这是析构函数 };
另外还有一个拷贝构造函数,可以自己去看看。
使用初始化列表来初始化字段
Line::Line( double len): length(len) { cout << "Object is being created, length = " << len << endl; }
"->"符号的意思:
当定义指向类的指针时,调用对象需要使用该符号。
派生类
G4里面要定义的很多类都是G4基类的派生类
C++使用 : 来作类的派生class derived-class: access-specifier base-class
virtual
用来定义类成员函数为虚函数。
G4里面的类和对象
G4里面写了很多的基类,比如我们熟知的QBBC、G4Step等都是基类,这些类可以在
里查询。
在我们写的程序里,include文件夹就是类的定义文件,即头文件;src文件夹是头文件对应的对成员函数的定义文件。