GEANT4学习 第一节 C++知识的准备

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等都是基类,这些类可以在

doxygen documentation

里查询。

在我们写的程序里,include文件夹就是类的定义文件,即头文件;src文件夹是头文件对应的对成员函数的定义文件。




  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于谦烫头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值