龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++基础入门教程(七):一些比较特别的基础语法总结(2)

时间:2014-11-18 03:19来源:网络整理 作者:网络 点击:
分享到:
先看第一条,很复杂,我们把typedef去掉,变成:void (Ref::*SEL_SCHEDULE)(float); 这是什么,其实我也解释不了,我C++很水的,但,这明显就是一个“函数变量”

先看第一条,很复杂,我们把typedef去掉,变成:void (Ref::*SEL_SCHEDULE)(float);
这是什么,其实我也解释不了,我C++很水的,但,这明显就是一个“函数变量”(暂时这么称呼它)。
一个返回值为void,参数为float的函数,并且限定其类为Ref,怎么样,很好理解吧。
 
把typedef放回去,这句代码就是把SEL_SCHEDULE定义为上述所说的那种函数。
接着看第二条代码,这是一个宏:
1.schedule_selector是宏的名称
2._SELECTOR是宏的参数
3.static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)简化为static_cast<SEL_SCHEDULE>(&_SELECTOR),这是强制类型转换,将传递进来的_SELECTOR转换为某种类型
4.转换为什么类型呢?没错,就是SEL_SCHEDULE类型,SEL_SCHEDULE是什么类型?刚刚已经解释过了,一个返回值为void,参数为float,其类为Ref的函数
 
最后,看看我们平时是怎么使用schedule_selector的:

复制代码 代码如下:

this->schedule(schedule_selector(HelloWorld::update));

结果就是把我们的HelloWorld的update函数转换成了SEL_SCHEDULE类型,然后传递给schedule函数。
 
呼,这回明白了吧,最后看看我们的update函数是如何定义的:void update(float dt);
返回值为void,参数为float,HelloWorld类继承了Layer(最终也是继承了Ref的)。
update函数的类型和SEL_SCHEDULE的基本上一样,除了类的类型以外。
但因为Layer的最终基类是Ref,所以可以把update函数强制转换为SEL_SCHEDULE类型。
 
好了,我再解释下去的话,就越来越说不通了,就到这里吧~

四、新的for循环(c++11)

C++11新增一种for循环语法,可以很方便地遍历数组、vector以及array。
使用很简单,如下:

复制代码 代码如下:

    int nums[3] = { 1, 2, 3 };
    for (int num : nums) {
    }

这样就能把nums的值以此赋值给num,从而遍历整个数组,不多说喇~

五、cctype标准库

我问大家一个问题,给你一个字母A,要判断它是大写还小写,你怎么判断?
(小若:你都说了是字母A了,当然是大写的啊!要判断吗?)
 
咳咳~!程序!我们是程序员,不能这么简单地去判断~!这样不严谨~!
我们应该这样:

复制代码 代码如下:

char c = 'A';
if(c >= 'A' and c <= 'Z') {
    // 嗯,是大写
}

一般人应该都会这么想吧?(小若:不,一般人都知道A是大写,不用判断)

其实这样不安全,万一字符编码不是ASCII呢?有可能答案就不一样了。
于是,我们应该这样写:

复制代码 代码如下:

    char c = 'A';
    if (isupper(c)) {
        // 嗯,是大写
        cout << "yes";
    }

isupper是cctype库的函数,用来判断字母是否是大写。
这样就更方便和通用了,
 
cctype库在头文件ctype.h里(或者cctype里),关于这个库的更多函数,百度一下,会有很多~

六、结束

好了,这次就到这里吧,C++果然不是我喜欢的东西,能吹水的地方比较少(都是比较严谨的东西),我还能坚持多久呢?~

精彩图集

赞助商链接