专业编程基础技术教程

网站首页 > 基础教程 正文

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

ccvgpt 2024-07-17 17:56:41 基础教程 9 ℃

教程内容基于《C++ Primer Plus》一书,适合初学者,熟手请直接忽略。

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

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

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 "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声明。可以节省一些开支。

如果你想学习更多C/C++编程知识,或者想提升自己的编程能力,可以加入学习交流群:587250700,和小伙伴们一起交流,还有大佬在线解答问题。

Tags:

最近发表
标签列表