Johan Niu

一个来自22世纪程序猿的回忆录

再读C++的设计艺术(6)

再读C++的设计艺术(6) 1 成员函数和非成员函数 成员函数和非成员函数之间最大的区别就是,成员函数的参数里面有一个你看不见的参数,这个参数传的是this指针。 this指向当前对象的指针。 2 继承 生物的继承进化,基因既有自己的基因,又有继承前人的基因(加机制),但是并没有完全加入了前人的基因(减机制),一些前人的基因可能没有继承。 但是在C++中,虽然有priave,但是还...

再读C++的设计艺术(5)

再读C++的设计艺术(5) 1 public 接口 例如一个类里面维护了一个数组,然后写了一大堆public函数,来操作这个数组。既然可以直接操作 数组,为什么要将其封装提供接口呢?好处就是提供接口,面向接口编程,松耦合,更容易复用。并且 将其物化后,提供接口跟别人交互,更像是一个人用语言去跟别人交流。并且将数据封装,更好的保护 了数据,不将其暴露出来。 2 构造函数 2.1 为什么要对...

再读C++的设计艺术(4)

再读C++的设计艺术(4) 1 先声明后使用原则 声明(声明变量和函数)是给编译器看的。 定义变量时才会开辟内存,声明不会开辟,声明是个编译器看的,如果声明了一个变量, 且后面没有使用,则编译器会将其优化,视为不存在,不会开辟内存。 写一个函数的顺序是先声明,再定义,最后调用。 但是声明和定义可以合起来写。例如下面的写法: void Swap(int, int); void ma...

再读C++的设计艺术(3)

再读C++的设计艺术(3) 1 程序运行过程 程序是如何运行的?点击一个exe,实在操作系统上运行一个程序,操作系统将exe的一些有效文件从磁盘装载到内存中。 对于C来说装载两类数据,一类是代码,另一类是静态数据。 静态数据又分全局变量和静态局部变量。 然后指令指针IP指向main函数入口点的对应位置。然后开始执行。 可以发现静态数据是先于main函数的执行而存在,这也是静态数据...

再读C++的设计艺术(2)

再读C++的设计艺术(2) 1 inline函数的设计 Bjarne Stroustrup(C++作者特别讨厌C里的宏定义),比如以下代码: #define max(x,y) (x)>(y)?(x):(y); ... int c = max(int a, int b) C中实现宏定义,代码真正执行的时候,其实是 int c = (x)>(y)?(x):(y);...

再读C++的设计艺术(1)

再读C++的设计艺术(1) 一 背景 研一选修杨力祥老师的《C++的设计艺术》,觉得受益匪浅。 经过研二研三上半年的代码项目经历,对面向对象理解的更加深入,决定再回过头来看看这边本,发现又有更加深入的体会。 因此整理出笔记。 二 面向对象的概念。 1、高级语言中类型的概念 类型的概念与类的概念非常相似 (1): int a, b ,c (2): class A { ......

Git 使用小结

Git 使用小结 一 初始操作 1.1 Git配置 1.1.1 配置文件 /etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’—system’ 给 git config,它将明确的读和写这个文件。 ~/.gitconfig 文件 :具体到你的用户。你可以通过传递—global 选项使Git 读或写这个特定的文件。 位于git目录的conf...

AES-CBC 加密算法的原理与代码实现

AES CBC 加密算法的原理与代码实现 算法原理 python 代码实现 account_encrypt.py #coding:utf-8 from Crypto.Cipher import AES # pip install pycrypto import binascii import base64 class Account_encrypt: def __init...