C++基础入门教程(一):基础知识大杂烩

我很郁闷,这本书果然讲得很详细,我在看第二章,看完要深呼吸,实在太详(lao)细(dao)了。
不过这很好,后面难一些的内容应该会不错~
 
那么,这章只是作为预览的章节,我抽出一些稍微比较有营养的内容记录一下吧~
 
注意:本系列教程不适合无任何编程语言基础的朋友,只是作为C++基础的一种补充。
教程内容基于《C++ Primer Plus》一书,适合初学者,熟手请直接忽略。

1. 如果你不注释,那么,我会把你注释掉~!

C++的注释有2种,
第一种,单行注释,那就是://
如下代码:

代码如下:

// 呵呵
    Test* t = new Test();;

//后面跟着的就是注释内容,属于单行注释
所谓的注释,就是与代码无关的内容,与编译器无关的内容,只是给我们自己或者其他人看的。
就像是说明书。
 
另外还有一种注释,那就是:/* */
如下代码:

代码如下:

/*
呵呵
你刚刚说什么来着?
*/
Test* t = new Test();;

/**/中间可以放一段文字,这是多行注释。
 
这废话就不多说了。

另外要说一下废话(小若:刚刚谁说废话不多说来着?),那就是注释真的很重要~!
不要听那么大牛说什么变量名字取得好、函数名字取得好就不需要注释。
每个人对“好”是有不同的评价的,所以注释很重要,谁喜欢看那些一整页都没有注释的代码呢?
不管是英文注释还是中文注释,都能让其它人或者自己以最快的速度了解某段代码的意思。
 
没错,如果遇到那些自以为自己写得一手完美代码的人,一个注释都不写的,那么,你就把他整个人给注释掉吧~!

2.头文件

语言本身除了语法之外,最重要的应该就是各种库了。
各种库,也就是它的各种功能,我们只要调用一些函数就能完成特定的功能。
比如打印文字、读写文件什么的。
 
C++提供了很多这样的库,它们被分别存放在不同的文件中。
如果想使用这些库里面的函数,就要包含这些库的头文件。
 
所以,我们经常会看到下面的代码:

代码如下:

#include "hello.h"
#include <iostream>

#include就是用来包含头文件的,包含头文件之后就能使用某个库的函数了。
那么,为什么有些头文件是.h结尾,有些又没有呢?
其实现在C++默认规定是不需要.h结尾的,.h结尾只是以前留下来的习惯~
但,其实现在大家在新建类文件的时候还是习惯保留.h,而C++自带的库可能更多的是没有后缀的。
 
其实头文件就是一个文件,什么结尾关系不大(大部分情况下),所以有时候我们也能看到.hpp结尾的文件。
这个就不多说了~
 
总而言之,如果你编译代码的时候报错,说什么不能使用未声明的类型之类的,基本上就是没有包含相应的头文件了。

3.命名空间

作为初学者,应该常常见到下面的代码(小若:难道不是初学者就不常见吗?):

代码如下:

#include "cocos2d.h"
using namespace cocos2d;

比如我们要使用Cocos2d-x的Sprite类,这个类是在cocos2d.h库中的,所以我们首先要包含cocos2d.h头文件。
然后就使用Sprite这个类,比如:Sprite* sp = Sprite::create(“boy.png”);
但相信大家都试过,这么直接用会报错的,大概是说找不到Sprite。
 
这是因为Sprite是在某个命名空间里的,我们要这样使用它:cocos2d::Sprite* sp = cocos2d::Sprite::create(“boy.png”);
这样就没问题了,那么,命名空间是个什么东西?

4.不同库的相同类名冲突

我们先来跑一下题,假设我想贡献一下,给大家写一个更好用的库(头文件叫做mutou.h),然后,其中也有一个类叫做Sprite。

于是,大家会这么使用我的库:Sprite* mSp = Sprite::new(“girl.png”);
 
那么,问题来了,学挖掘机哪家…(小若:停~!回来!别跑题!)
那么,如果我们想同时使用cocos2d和mutou的Sprite类,会发生什么事情?如下代码:

代码如下:

#include "cocos2d.h"
#include "mutou.h"
Sprite* sp = Sprite::create("boy.png");
Sprite* mSp = Sprite::new("girl.png");

这样一定会报错,大概是说Sprite不明确
所以,这个时候,就需要一个叫做“命名空间”的东西来区分这些不同库的相同名字的类了。
我们把cocos2d的库放到名为cocos2d的命名空间里,把mutou的库放到名为mutou的命名空间里:

代码如下:

#include "cocos2d.h"
#include "mutou.h"
cocos2d::Sprite* sp = cocos2d::Sprite::create("boy.png");
mutou::Sprite* mSp = mutou::Sprite::new("girl.png");

这么使用就不会出问题了,至于如何把某个库放到某个命名空间中,其实很简单,但是这里先不介绍了。

5.偷懒

回到最初,using namespace cocos2d;又是什么东西呢?
如刚才所见,在Sprite前面总是要加上cocos2d::这样的前缀,实在是太烦人了。
所以,我们可以偷懒,使用了using namespace cocos2d;之后,就不需要写这样的前缀了。
 
但是,这只是在没有冲突的情况下,如果遇到刚刚说的不同库的相同类名冲突,就必须使用前缀。
 
书上有提到,滥用using namespace不是什么好事,但我没有经历过什么坑,可能在大型项目中才会出现问题吧。
一般的手游是没什么影响了。
 
如果担心的话,可以这样使用:using namespace cocos2d::Sprite;
这样依旧可以不用cocos2d::前缀就能使用Sprite类,但如果要用到cocos2d库的其他类,就又要再一次使用using namespace cocos2d::name;
总之,这种方式就是:用到的类才使用using声明。可以节省一些开支。

6.结束

好吧,前面的内容实在是太基础,基础到没东西可以介绍了。
下一章应该会好一些…

(0)

相关推荐

  • C++基础知识实例解析(一)

    今天小编和大家一起通过几个实例学习C++基础知识,下面进行实例解析: [1-1]编写一个程序,实现一个整数.长整数.浮点数和双精度数除以2的计算. [分析]这是一个典型的函数重载的程序.声明函数div()为除法函数,每个函数的功能基本都是一致的,不同的只是形式参数的类型不同而已.程序代码如下: #include <iostream> using namespace std; int division(int x){ return x/2; } long division(long x){ re

  • c++运算符重载基础知识详解

    实际上,很多C++运算符已经被重载.eg:将*运算符用于地址,将得到存储在这个地址中的值,将他用于2个数字时,得到的将是他们的乘积.C++根据操作数的数目和类型来决定采用哪种操作. C++允许将运算符重载扩展到用户定义的类型.例如,允许使用+将两个对象相加.编译器将根据操作数的数目和类型决定使用加法定义.运算符重载可以使代码看起来更自然.例如,将2个数组相加是一种常见的运算.通常,需要使用下面这样的for循环来实现: 复制代码 代码如下: for (int i = 0; i < 20; i++)

  • C++基础知识总结

    不管是自我定位太高,还是职位层次太低,系统复习了一遍很久没有摸过的C++总是有好处的.总结如下: 一.new和malloc的区别 1.new和delete配对,释放数组需要用delete[].new和delete实际上调用了malloc和free,另外调用了类的构造函数和析构函数. 2.malloc和free配对,malloc返回的是void指针,需要强转. 3.new申请的内存保存在堆中,malloc申请的内存保存在自由存储区. 二.C++运算符 1.取模操作符:% 2.逻辑否.与.或:!,

  • c语言与c++基础知识点(必看)

    1.后缀名: C++/C程序的头文件以.h为后缀,C程序的源文件以.c为后缀,C++程序的源文件通常以.cpp为后缀(有些书中介绍有一些系统以.cc或.cxx为后缀的源文件). 在Linux系统下的gcc,.C(部分),.cc或.cxx 为后缀的源文件, 它们也是C++源代码文件. 2.extern关键字:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两个

  • Bootstrap零基础入门教程(二)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 本文重点给大家介绍Bootstrap零基础入门教程(二),具体详情如下所示: 过程中会频繁查阅资料的网站: http://www.

  • Bootstrap零基础入门教程(三)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 写到这里,这篇从零开始学Bootstrap(3)我想写以下几个内容: 1. 基于我对Bootstrap的理解,做一个小小的总结.

  • Android 基础入门教程——开发环境搭建

    现在主流的Android开发环境有: Eclipse + ADT + SDK Android Studio + SDK IntelliJ IDEA + SDK 现在国内大部分开发人员还是使用的Eclipse,而谷歌宣布不再更新ADT后,并且官网也去掉了集成Android开发环境的Eclipse下载链接,各种现象都表示开发者最后都终将过渡到Android Studio,当然这段过渡时间会很长,但如果你是刚学Android的话建议直接冲Android Studio着手:而且很多优秀的开源项目都是基于

  • 一看就懂的ReactJs基础入门教程-精华版

    一.ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了.由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单.所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具. ReactJS官网地址:http://facebook.github.io/re

  • MySQL基础入门教程之事务

    目录 引言 1.事务操作 1.1 未控制事务 1.2 控制事务一 1.3 控制事务二 2.事务的四大特性 3.并发事务问题 4.事务隔离级别 总结 引言 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000. 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败. 正常情况: 转账这个操作, 需

  • Leaflet 基础入门教程示例

    目录 什么是Webgis? 什么是Leaflet? 在Vue中安装Leaflet,与其他依赖 在App.vue中使用 初始化地图 chinaProvider地图瓦片 addControls使用工具集 attribution创建自定义版权 Marker创建点 创建线 Polygon创建三角形 Popup弹窗&Tooltip提示 Geojson区域描边 总结 什么是Webgis? webGis又称之为网络地理信息系统,GIS的全名是Geographic Information System,它是在计

  • C++基础入门教程(一):基础知识大杂烩

    我很郁闷,这本书果然讲得很详细,我在看第二章,看完要深呼吸,实在太详(lao)细(dao)了. 不过这很好,后面难一些的内容应该会不错~   那么,这章只是作为预览的章节,我抽出一些稍微比较有营养的内容记录一下吧~   注意:本系列教程不适合无任何编程语言基础的朋友,只是作为C++基础的一种补充. 教程内容基于<C++ Primer Plus>一书,适合初学者,熟手请直接忽略. 1. 如果你不注释,那么,我会把你注释掉~! C++的注释有2种, 第一种,单行注释,那就是:// 如下代码: 复制

  • Go语言入门教程之基础语法快速入门

    Go语言是一个开源的,为创建简单的,快速的,可靠的软件而设计的语言. Go语言实(示)例教程,通过过实例加注释的方式来介绍Go语言的用法. Hello World 第一个程序会输出"hello world"消息.源代码如下: 复制代码 代码如下: package main import "fmt" func main() {     fmt.Println("hello world") } //通过go run来运行Go程序 $ go run h

  • C++基础入门教程(二):数据、变量、宏等

    哎,木了个头的,这书太详细了~看得累人 前面部分太过基础了,很多语法方法的东西我也不重复记录了~ 今天才看看C++涉及到数据的一些基础点吧,我把书中稍微比较有营养的部分抽离出来 1.初始化 一般情况下,我们声明和初始化变量是这样的:int iNum = 10; 其实这是延续了C语言的语法,C++还有一种语法,是这样的:int iNum(10); 其实大部分人还是习惯用第一种吧(我也是),但如果哪天我们在别人的代码里看到第二种形式,不要被吓蒙了~ 2.宏定义 宏,用最粗俗,不,是最通俗的说法来解释

  • C++基础入门教程(四):枚举和指针

    我已经把<C++ Primer>一书准备好了,如果这本<C++ Primer Plus>继续这么瞎闹的话,我就换主角~! 没错,这书连if while都还没介绍呢,就开始把指针搬出来了,虽然只是简单介绍.. 这目录编排我也是醒了. 那么,按照书上的进度,今天来初步说说指针. 但,今天周五,你懂的,就随便水一下,因为我怕到周一又忘了. 1.枚举 那么,枚举是什么呢?(小若:等等~!说好的指针呢?) 大部分高级语言里应该都有枚举了,所以也没什么好介绍的. 使用是这样的: 复制代码 代码

随机推荐