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

 更新时间:2020年4月25日 17:39  点击:1376

我很郁闷,这本书果然讲得很详细,我在看第二章,看完要深呼吸,实在太详(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.结束

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

[!--infotagslink--]

相关文章

  • C++ STL标准库std::vector的使用详解

    vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
  • C++中取余运算的实现

    这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • C++中四种加密算法之AES源代码

    本篇文章主要介绍了C++中四种加密算法之AES源代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2020-04-25
  • C++ 整数拆分方法详解

    整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧...2020-04-25
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Lua语言新手简单入门教程

    这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • 详解C++ bitset用法

    这篇文章主要介绍了C++ bitset用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • 浅谈C++中的string 类型占几个字节

    本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
  • C++ Eigen库计算矩阵特征值及特征向量

    这篇文章主要为大家详细介绍了C++ Eigen库计算矩阵特征值及特征向量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • C++ pair的用法实例详解

    这篇文章主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下...2020-04-25
  • VSCode C++多文件编译的简单使用方法

    这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
  • C++中的循环引用

    虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。下面通过实例代码给大家介绍c++中的循环引用,一起看看吧...2020-04-25
  • C++随机点名生成器实例代码(老师们的福音!)

    这篇文章主要给大家介绍了关于C++随机点名生成器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C++如何删除map容器中指定值的元素详解

    map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
  • C++ 约瑟夫环问题案例详解

    这篇文章主要介绍了C++ 约瑟夫环问题案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-15
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25