The best input is OUTPUT.

2016-03-07
static和const成员变量的初始化

static成员变量

不能在类声明中初始化,要在方法文件中初始化,参考:关于C++类的静态成员变量

const成员变量

由于是const类型一定要在创建的时候初始化,因此在成员初始化列表中进行初始化,参考:C++类构造函数的特殊初始化成员函数的语法

const static 成员变量

负负得正,“干脆就在类声明中初始化了吧”C++编译器如是说。

Read More

2016-03-07
C++类继承中需要注意的那点东西(一)

关于C++中的派生类和基类的关系就总结下来就是:

  1. 派生类继承了基类的部分方法
  2. 有些方法是不能被继承的,例如构造函数、析构函数、赋值运算符
  3. 基类的数据成员也会继承下来,但是private成员是不能够被派生类直接访问的,需要通过基类的共有方法来访问,protected数据是可以向public数据一样被派生类通过名称空间解析运算符::来访问。
我就把派生类想象成了一个包含基类的类,基类的小秘密不对外公开,想要改变小秘密的内容要使用基类自己的方法(比如基类的构造函数,基类的赋值运算符函数等),总之代码写下来感觉,其实基类在派生类中还是很独立的
在派生类构造派生类之前先调用基类的构造函数初始化基类组件,在调用派生类析构函数时会在析构派生类对象之后调用基类的析构函数释放基类组件。顺序保持一致。
Read More

2016-03-04
C++类构造函数的特殊初始化成员函数的语法

先上个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Quene {
private:
int items;
const int qsize; // 私有数据成员是常量
...
};

// 构造函数
Quene::Quene(int qs)
{
...
qsize = qs; // !! NOT ALLOWED !!
...
}

为什么不允许?
首先类声明是不分配内存的,也就是说不能在类定义中进行变量初始化(静态常量除外,当然C++11已经支持在类声明中进行变量初始化了)。
程序接着执行,进行对象的创建:

  1. 先分配内存创建对象,这个时候还没有执行构造函数函数体(也就是{}中的代码),还未对数据进行初始化
  2. 然后执行构造函数的函数体,这是执行到赋值qs的时候就会报错,因为这是个常量,创建以后是无法修改常量的值的。
Read More

2016-03-04
关于C++的返回对象

关于C++的返回对象

这里主要总结两种:

  1. 返回指向const/非const对象的引用
  2. 返回const/非const对象
Read More

2016-03-02
关于C++的定位new运算符

new运算符负责在堆中(heap)中找到足以能够满足要求的内存块。
定位(placement)new运算符是new运算符的变体,能够指定要使用的位置。可以使用这种特性来设置其内存管理规程,处理需要通过特定地址访问的硬件或在特定位置创建对象。

Read More

2016-02-28
kMC中的Markov Chain(马尔可夫链)

在动力学蒙特卡洛kMC模拟中,因为组态变化的时间间隔很长,体系完成的连续两次演化是独立的,无记忆的,所以这个过程是一种典型的马尔可夫过程(Markov process)。
下面先定义下符号:


configuration: $u, v, ... $
event: $ \alpha, \beta , ... $
transition rate($v \rightarrow u$) : $ \omega_{u v} $

Master Equation

体系的时间演变通过Markov master equation来描述
$$ \bar{p}_{u}(t) = \sum_{v}^{}{\omega_{u v}p_{v}(t) - \omega_{v u}p_{u}(t)} $$
其中${p}_{u}(t)$是体系在时间$t$处在$u$的概率。

Read More