世嘉新人培训教材学习_第一章 _C++知识点复习

news/2024/11/28 0:43:23/

因为第一章为基础的C实现了推箱子的简单游戏,后面要使用到许多C++的知识,之前学习过,但是因为用的较少,这里在简单复习一下。加深理解,同时也知道了在学校学的知识点只是停留在基础的语法部分,要真的去理解才能取得进步。

一、命名空间

 一、为什么使用命名空间

 在C++应用程序中会出现同样的情况。例如,您可能正在编写一些具有名为xyz()函数的代码,并且还有另一个可用的库,它也具有相同的xyz()函数。现在编译器无法知道您在代码中引用的xyz()函数的哪个版本。

名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。使用名称空间,您可以定义定义名称的上下文。本质上,名称空间定义了一个范围。

C++命名空间的使用:

使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable
使用默认命名空间中的变量:  ::variable

 例如:using namespace std;  该指令告诉编译器后续代码将使用指定命名空间  std 中的东西。

二、模板

//类模板:
template<typename 类型参数1 , typename 类型参数2 , …> 
class 类名{//TODO:
};
//函数模板
template<typename T1,typename T1, ...> 
返回值类型 模板名(形参列表){//函数体
}

三、构造函数和析构函数

类的构造函数是一种特殊的函数,在创建一个新的对象时调用。(默认构造函数就是无参构造函数)

类的析构函数也是一种特殊的函数,对象消亡时被调用。

拷贝(复制)构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。只有一个参数,为本类的引用

默认情况下,C++编译器会至少给类加三个函数(默认构造函数,复制构造函数,析构函数)。

①若写了有参构造函数,则不会提供无参构造函数,会有拷贝构造函数。

②若写了拷贝构造函数,则不会提供其它构造函数。

 

四、const

1、const修饰变量 const修饰变量,可以使变量具有常属性,也就是该变量在以后的使用中其值都不能进行改变

(const修饰的变量要进行初始化。)

2、const和指针

int const* p;//指针p本身可以修改,但是p指向的内容不可以修改
const int*p;//指针p本身可以修改,但是p指向的内容不可以修改// const 和变量类型 int 可以互换位置,二者是等价的
int *const p;//指针p本身不能修改,但是p指向的内容可以被修改
int const *const p;//指针p本身和p指向的内容都不可以修改
​
const int *const p;//指针p本身和p指向的内容都不可以修改
简记:(const放在*左边)左定值,右定向

3、保护函数参数不被改变 用const修饰函数的参数,可以保证该参数的值在函数内部不被改变。

一般情况下,如果参数是按值传递的,那么函数本来就无法改变参数值。但如果按指针传递或按引用传递,则const是有用的。

4、const修饰函数返回值 const修饰函数的返回值,表示函数的返回值是常量,不可更改。该返回值只能被赋给加const修饰的同类型变量。一般在类中使用,不常用。

const int fun(){//...}

5、const修饰类成员函数 const可以修饰类成员函数,防止类成员函数中除了static成员之外的其他成员(变量)被修改。

class T{
public :void fun()const{a = 20;//错误,不可以修改非static的值b = 10;}
private:int a;static int b;
};
//注意:const 关键字不能与 static 关键字同时使用,因为 static 关键字修饰静态成员函数,静态成员函数不含有 this 指针,即不能实例化,const 成员函数必须具体到某一实例。

小例子无法体现const的好处,当程序规模变大时就会体现出这种安全机制的重要性了。在写函数时只要能加const就尽量加上。

五、delete

T *p = new T;  
delete p;//释放
T *p =new T[N];//动态分配一个任意大小的数组:
delete[] p;//释放  ,如果采用delete p;会导致动态分配的数组没有被完全释放。

因为编译器无法从指针上判断所指的是否为数组,需要人来告知。

 

 

 

 

 


http://www.ppmy.cn/news/535669.html

相关文章

世嘉rom_庆祝世嘉音响团队

世嘉rom Originally launched in 1998 and 2001 respectively, Sonic Adventure and Sonic Adventure 2 are two of the first console games I ever played (admittedly I was about 6 years old when I played them). riginally在1998年和2001年分别推出了&#xff0c;索尼克…

世嘉MD游戏开发进阶篇【三】:向量归一化的实现及应用

向量归一化是非常有用的&#xff0c;游戏中经常能用到&#xff0c;就说大家都见过的&#xff0c;FC魂斗罗的敌人发射子弹就能用到了&#xff0c;敌人向玩家发射子弹首先要获取到向量&#xff0c;这个向量不能直接作为方向去用&#xff0c;必须要经过归一化处理才行&#xff0c;…

django中发送get post请求并获得数据

django中发送get post请求并获得数据 项目结构如下注册路由 urls.py在处理函数中处理请求 views.py进行 get的请求01浏览器 get请求传参数02服务器django get参数解析获取01浏览器 post的发送浏览器get 请求 获取页面返回的 form 发送post请求 带参数 02服务器django的post请求…

世嘉MD游戏开发进阶篇【二】:C语言实现有限状态机

有限状态机应用是非常广泛的&#xff0c;比如关卡的切换、角色动画状态的切换等等&#xff0c;我自己写了个有限状态机&#xff0c;开发世嘉MD游戏的朋友可以用得到&#xff0c;对于解耦还是有点帮助的&#xff0c;不必挤在一个文件里。 没有学过MD游戏开发基础的可以翻看我写…

世嘉MD游戏开发【十一】:背景卷轴滚动(视差滚动)Parallax Scroll和摄像机

背景卷轴这个名字现在比较少听到了&#xff0c;现在的游戏引擎都不用这项技术了&#xff0c;或者可以轻松实现这个功能不值一提了&#xff0c;又或者不用这个技术照样也可以等等原因&#xff0c;大家基本听不到了。 玩过世嘉MD模拟器的可能对图层分层显示这个功能有印象&#…

世嘉MD游戏开发【三】:输入控制(上)

这一节讲一下SGDK中的输入控制&#xff0c;SGDK提供了两种输入控制方式&#xff0c;一种是用回调函数接收输入信息&#xff0c;很自然的另一种就没有用回调函数了&#xff08;貌似废话-.-!&#xff09;&#xff0c;成上下两节&#xff0c;这一节讲不用回调函数来接收输入信息。…

世嘉MD游戏开发【六】:矩形填充Tile图块

上节课讲了如何显示一个Tile图块&#xff0c;这节课我来讲一下Tile图块的矩形填充。 打开Sega Genesis Tile Designer&#xff0c;设置tile宽度为4tiles&#xff0c;高度也是4tiles&#xff1a; 随便绘制几个tile块&#xff0c;下面我用我自己绘制的作为例子&#xff1a; 导出…

世嘉MD游戏开发【八】:淡入和淡出

淡入淡出&#xff0c;很好理解&#xff0c;淡入就是画面由黑过渡到彩色&#xff0c;淡出就是画面由彩色过渡到黑色&#xff0c;其实也不一定必须是黑色&#xff0c;看你自己需求了。 注&#xff1a;淡入淡出的功能可以完成非常多的游戏玩法设计哦~打开脑洞就有惊喜~ 效果图如…