C++学习方法导论


Coder Life

转载请注明出处:转载自 至尊明帅的博客 原文地址:http://zi-jin.com/?p=10

很多同学都在为学C++而烦恼,现在我希望能提供一些帮助大家学C++的东西。

第一部分:准备工作

1.我不想一开始就介绍很多概念性的东西(但有一些是必须的),想先让大家亲自体验,然后引出概念。希望大家喜欢这种方式。

2.大家看到这篇文章前应该已经看过有关C++语言的书籍,如学校课本,本文并不是代替课本,或许只是引导你如何去看课本及其他书籍。

3.本文说的C++均指标准C++。(这句话是写给看得懂这句话的人看的,现在大家可以不用在此纠结。)

4.C++是一门语言,是人与机器的沟通方式。遵循C++语言规范写出来的东西叫代码,它必须经过编译器编译成机器能执行的指令。

5.其实如果你能把C++ Primer这本书看完,不需要任何其他资料就能了解整个C++语言了,但真的一开始就抱着那么大一本砖头书看也不知道好不好,反正我没试过,我觉得学习过程中还是要以培养兴趣为主。

6.如有任何疑问,欢迎在下面留言:http://zi-jin.com/archives/10#comment

第二部分:从大家都看过的一个C++程序说起:

1.“int”是什么?
int a;
表示声明(Declare)一个整数型变量(interger),其名称为“a”,就像数学里面“设长方形的长为a,宽为b”,值得注意的是你不能“设长方形的长为a,宽为a”。因为标识符(Identifier)在其作用域(Scope)内必须是唯一的,从其英文名可以看出,我们必须凭这个名字而找到准确的事物。
声明多个整数型变量时,可以写成:int a, b, c, d, e;
在C++中,你必须先声明一个变量,才能使用它。
这句话是什么意思?就是上面那个程序中,如果没有“int a;”这个语句,那编译时就会报错,通常的提示是:[未声明的标识符 ‘a’](error: ‘a’ was not declared in this scope)
解决方法?你是把int a;删掉了引起的这个问题,把它重新加上去呗……
除了int外,C++还有其他基本内置类型。下面都提一下:
bool 布尔型
其值为true或false,用来表示一个条件是否成立。比如我可以声明以下一组变量来简单的表示一个人的基本特征:bool bMale, bTall, bStrong, bHealthy, bMarried;

char 字符型
通常用单引号里面一个字符给它赋值(建议这么做),一个字符占一个字节。另外建议了解一下“转义符”(Escape)。如果你不知道为什么’�’等于0的话那就是还不够了解。

wchar_t 宽字符型
通常用单引号里面一个字符或2个字符给它赋值(建议这么做),一个宽字符占2个字节。有很多人都不知道 wchar_t w = ‘ab’; 这样赋值。

short 短整形
一般占2个字节

int 整形
一般在多少位CPU上工作就占多少位。比如在32位机器上就占4个字节(8位为1字节)。建议不了解的同学搜索一下字、字节、位、双字等单位。

long 长整形
一般占4个字节

float 单精度浮点数
发现有很多同学学了很久C++还不知道如何用C++来表示整数之外的数……建议同学了解一下float在内存中是如何存储的(问搜索引擎)。

double 双精度浮点数
这个也用来表示浮点数,而且推荐使用这个,因为现在32位机器一般处理double比float更快。同样建议同学了解一下double在内存中是如何存储的。

long double 扩展进度浮点数
这个提供的精度一般没有必要,而且还需要承担额外的效率代价。

char型和各种整型前面可以加signed 或 unsigned 说明符
一般不加默认为signed
加unsigned就成了无符号型
有符号型可以表示的数据范围一般是 -2^(n-1) ~ 2^(n-1)-1
无符号型可以表示的数据范围一般是 0 ~ 2^n – 1
如 char 可以表示 -128~127
unsigned char 可以表示 0~255
特别说明:signed a; unsigned b; 一般分别等价于 signed int a; unsigned int b;

除了以上这些基本内置类型外,你还可以使用“typedef”来自定义类型,以及枚举类型(enum)、结构体(struct)、类(class)、联合(union)等

声明变量的格式一般为:
typename identifier [, identifier2, identifier3, ...];
声明时也可以给变量定义,如:
int a = 1, b = 2;

2.函数(function)是什么?
从其英文名可以看出函数其实是一个“功能”,它是用来被调用的,它能根据你提供给它的东西得到一个结果并告诉你、对你提供的东西进行诸多处理、或者只是你对一组常用的语句进行的“打包”。
函数包括参数(parameter)、函数体(function body)、返回类型(return type)。
其声明格式通常为:
return_type function_name(parameters);
声明不包括函数体,定义才包括函数体,定义格式通常为:

其中parameters的格式一般为parameter[, parameter2, parameter3, …] *值得注意的是函数并不一定要有确切数目的参数,感兴趣的可以先自行搜索“C++ 不定参数”来了解
函数体是一个块(Block),块就是用一对花括号括起来的语句序列,可以为空,块就是一个作用域,块中还能有块。
参数就是你提供给它的东西,函数体就是它的实现过程,返回类型是指定它将返回什么类型的结果。
返回类型除了你声明时能用的类型外,还包括一个void类型,即表示不返回东西。
下面来看这样一个例子:

如果窗口一闪而过,解决办法:
1.从Terminal或CMD中调用程序
2.在return 0; 的前面加一条 scanf(“%d”);
3.对于Windows系统,在return 0; 的前面加一条 system(“pause”);

上面这个例子如果不明白 “out” 是什么意思,请搜索“转义符”
如果不明白 char *str 是什么意思没关系,其实这是指针
你要明白的仅仅只是函数的格式以及调用

下面来介绍如何在一个函数func1中调用另一个函数func2的同时func2也调用func1

这个是编译不过的,不管你如何调换func1和func2的顺序都没用。
解决方法是:

函数名和变量名一样也是标识符,也必须要先声明后引用,以上解决办法就是在func1和func2的定义之前加上func2的声明(上面已经介绍了函数声明的格式)

另外还有一个有趣的,那就是一个函数可以调用它自己,看例子:

编译并运行后可以看到会输出10行”Called once”,学过循环控制语句的同学当然还知道其他方法实现这一点。但现在这里是介绍递归函数。通常利用循环控制语句执行效率要比递归函数高。

3.“main”是什么?

4.“#include”是什么?“#include <iostream>”和“#include “iostream””有什么区别?

5.命名空间(namespace)是什么?“#include <iostream>”和“#include <iostream.h>”有什么区别?

6.“using namespace std”是什么?

7.“cin”和“cout”是什么?

第二部分:
1.作用域(Scope)

To be continued…

WordPress文章ID重复利用环保节约方案


Blog itself Coder Life

写博客经常会删掉以前的一些日志,就浪费了很多ID。

于是提供重复利用文章ID的方法:

注意!写本文章时使用的WP版本为3.2.1

用文本编辑器打开 /wp-includes/post.php 文件,找到 wp_insert_post 函数(3.2.1版直接找到2584行),看到如下代码:

在下面添加一部分,变成:

看,这篇文章的地址在经过这样修改之后就不是 http://zi-jin.com/archives/5xx 而是 http://zi-jin.com/archives/1 了。
Enjoy it!

博客重生


Blog itself

07年的时候注册了一个域名shuaiqixiaozi.com,开始写博客,在网上搜索博客方面的东西,学习,与其他博客建立关系,基本上了解到大多数写博客就是为了访问量,为了PageRank,为了ads赚点钱。看各种文章并照着做,发的日志很多都是网上有的东西,甚至直接照搬过来的东西,然后还SEO优化,不到一个月,我博客的PR就升到2了,然后也放些广告什么的,网游充值提成什么的,以及淘宝网购提成。

但毕竟对这些不感兴趣,现在回过头来看,以前那博客简直就是一坨屎。上面的东西都是为了别人用谷歌、百度能搜索到你的博客,其实并没有真正写博客的习惯,经常很长时间一点内容都没有,要写也不知写啥,有东西也没想到要写到博客上。

后来博客改用WordPress,没再弄过广告什么的了,PR降到0,然后又回升到PR3,那时候还看到别的网站上显示我博客网站价值有十多万RMB,也不知道他那个价是怎么估的。

2010年的时候决定把博客域名换成zi-jin.com,但搜索引擎们还是一直收录原来那个,而不管新的这个,由于zi-jin.com和shuaiqixiaozi.com显示的内容始终是一模一样的,估计还以为zi-jin.com是抄袭的然后惩罚(确实有这个机制)。

换了zi-jin.com之后,准备做一个技术博客,但也是没写什么,顶多就是偶尔把自己做的一些东西发上来。现在感觉这博客这么多年都扮演着一个鸡肋角色。还每年要花我那么多钱……

早些天因为准备做sowicm.com我的个人主页,规划结果是以后我做的东西都放到sowicm.com,那zi-jin.com连它最后一点作用都失去了……于是不得不重新为博客定位了,定位的结果是从面对搜索引擎改向面对圈子,比如朋友圈子、技术圈子,最好能形成一批固定的读者。并且用博客代替以前的QQ空间,逐步把QQ空间的日志都迁移过来。并养成写博客的好习惯,哈哈。
然后现在第一步,非常重要的工作,就是建立一套优秀的Categories

【至尊沙漏】 – 闹铃闹钟软件 – 定时提醒 – 延时提醒 – 规律提醒 – 执行命令


Release

至尊沙漏是一个提醒工具。
运行后只在托盘处显示一个图标:

SNAGHTMLeee17d

最新版本:1.1.2

更新日志:

1.1.2 更新:
    ·新增“下次启动时”(当次提醒)和“每次启动时”(规律提醒)2种提醒方式
    ·修正了自动运行的实例不播放声音的问题

1.1.1 更新:
    ·修正了更新数据库的问题

1.1.0 更新:
    ·加入了导入数据的功能
    ·3处细节调整
    ·修正了自动启动与手动启动的使用的数据不同的错误

Continue reading 【至尊沙漏】 – 闹铃闹钟软件 – 定时提醒 – 延时提醒 – 规律提醒 – 执行命令