“青青子衿,悠悠我心。但为君故,沉吟至今。”

这里是目录

  • 前言
  • 一、命名空间
    • 1.什么是命名空间?
  • 二、C++输入输出
  • 三、缺省参数
    • 1.什么是缺省参数?
    • 2.全缺省参数
    • 3.半缺省参数
  • 四、函数重载
    • 1.什么是函数重载?
    • 2.重载规定
  • 五、重载原理
    • 1.为什么C语言不支持函数重载,而C++支持?
  • 六、extern "C"
  • 七、引用
    • 1.引用特性
    • 2.常引用(重点)
    • 3.引用做形参
    • 4.引用作返回值
  • 八、内联函数
    • 1.什么是内联函数?
    • 2.内联函数特性
  • auto关键字(C++11)
    • 1.什么是auto
    • 2.auto使用规则
    • 3.auto与指针引用结合起来使用
    • 4.如何在同一行定义多个变量?
    • 5. auto不能推导的场景
  • 九、基于范围的for循环(c++11)
    • 1.范围for的使用条件
  • 十、空指针nullptr(C++11)特性

前言

1.C++很难学?——是的
C++整体学习难度和Java整体学习难度是一样的
不要想着精通C++。

一、命名空间

命名空间是为了防止冲突,有时候全局变量定义了好多,这时候会导致命名冲突,这时候的命名空间的作用就是给文件定了一个作用域,在这里就可以限定变量,函数的名称。

1.什么是命名空间?

命名空间就是namespace 后面跟的一串字符。这一串字符就叫做命名空间。命名空间的名字可以随便起。

代码举例定义:
命名空间里的变量a,和函数Add是独立的。和其他命名空间隔开的。

namespace N1//N1就是命名空间
{int a;int Add(int x, int y){return x + y;}
}

二、C++输入输出

C++的输入输出函数是cin和cout。从英语可以看出,in就是输入,out就是输出。cin输入就相当于C语言中的sancf,cout就相当于C语言中的输出。
这两个函数学习起来成本有点高现在学了不一定能学懂,以后再说。

三、缺省参数

1.什么是缺省参数?

缺省参数就相当于C语言中的形参可以赋初始值,也就是为形参指定了默认值。
规则:如果没有实参穿过去,则使用该默认值。否则使用形参的值。

2.全缺省参数

全缺省就是全部形参都设置默认值

void Print(int a = 10, int b = 20)
{cout <<a << endl;cout << b << endl;
}

3.半缺省参数

半缺省参数是有的形参没有设置初始值。但是缺省只能从右往左缺省。

void Print(int a, int b = 20)
{cout <<a << endl;cout << b << endl;
}

四、函数重载

函数重载是什么?

1.什么是函数重载?

函数重载也是为了解决C语言的不便。假如需要调用Add加法的函数,如果没有函数重载的话就需要写不止一个Add函数。因为数有整数int,有浮点数float,有double类型的。这样就需要写三个版本的Add函数了。
但是C++的函数重载解决了这个问题。你想要不同类型的任何的数字相加都可以。都可以实现调用Add这一个名字,而不需要写为其他名字。

2.重载规定

函数重载的这些同名函数必须 形参列表不同。形参列表不同指的是:形参顺序不同,形参类型不同,形参个数不同。

五、重载原理

1.为什么C语言不支持函数重载,而C++支持?

不论是C/C++,都要经历,预处理,编译,汇编,链接。在编译的阶段,C语言会将函数名形成一个符号表,假如函数是Add(int x, double y);那么C语言形成的符号表里的函数名也是Add。但是C++他不一样呀,他为了弥补C语言这个小傻瓜的空白,在编译后形成的符号是:_ZAddid。格式是什么呢?格式是:_Z + 函数名 + 类型首字母,这就是C++支持函数重载的原因。

这样我们就理解函数重载要求 参数不同,和返回值没关系。

六、extern “C”

extern C是在C++工程中想让代码按照C语言的方式编译,或者想调用C语言工程时所用的。函数前面加extern C 是高数编译器,该代码或者函数需要按照C语言的规则编译。

七、引用

引用就是取别名
引用就是重用了C语言的取地址符号&。
代码举例:

#include <iostream>
using namespace std;
int main()
{int a = 10;int& b = a;return 0;
}

b称为a的引用。
引用格式:类型& 引用变量名 = 引用实体。

1.引用特性

1.引用在定义时必须初始化。
2.引用只能引用一个实体。什么意思呢?意思就是b引用了a之后,就不能再引用其他变量了。

2.常引用(重点)

什么是常引用?
在前面加了const修饰的就是常引用。
常引用涉及到了权限放大缩小的问题。权限指的是变量的读和写。
被const修饰的变量不能改变其值。所以只能读取。
读就相当于你看书,写就相当于你在书上做笔记。

代码举例:

int main()
{const int a = 10;//int& ra = a;错误,权限放大。因为a是只读的,而int是可以读写的。const int& ra = a;
}

3.引用做形参

引用做形参就可以不用传指针了。
这样就方便了我们写程序的效率。
代码举例:
这里的x和y是实参的引用。

//交换函数
void Swap(int& x, int& y)
{int t = 0;t = x;x = y;y = t;
}

4.引用作返回值

引用可以做返回值。但是要注意:只有出了作用域,被返回的值没有销毁,才可以用引用做返回值。所以我们定义的变量必须是static修饰的或者是动态开辟的,或者是全局变量等不会随着函数调用的结束而销毁的变量。
代码举例:

int& Add(int a, int b)
{static int c = a + b;return c;
}

注意:如果函数返回时,出了函数作用域,返回对象未还给系统,则可以使用引用返回;如果已经还给系统了,则必须使用传值返回。

八、内联函数

1.什么是内联函数?

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用的地方展开。使用时只用在函数前面加上inline,但是inline只是一种建议,具体实现还是看编译器。

2.内联函数特性

1.函数会在调用的地方展开没有函数压栈的开销,内联函数的使用可以提升程序的运行效率。频繁调用的小函数建议定义成内联函数
2.inline对于编译器只是一个建议,编译器会自动优化。
3.inline不建议声明和定义分离,因为inline是在函数调用的地方展开,编译的时候不会给函数分配地址,所以会导致连接错误。

auto关键字(C++11)

1.什么是auto

在C++11中,标准委员会赋予了auto全新的含义:auto不再是一个存储类型的指示符,而是作为一个新的类型指示符来指示编译器,auto生命的变量必须有编译器在编译使其推导而得。

2.auto使用规则

1.使用auto变量时必须初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型,编译器在编译期间会将auto替换为变量实际类型。

代码举例

#include <iostream>
using namespace std;
double Fun()
{return 3.14;
}
int main()
{int a = 10;auto b = a;auto c = 'A';auto d =Fun();cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;cout << typeid(d).name() << endl;return 0;
}

3.auto与指针引用结合起来使用

用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时必须加&。

#include <iostream>
using namespace std;
int main()
{int a = 10;auto b = &a;auto* c = &a;auto& d = a;cout << typeid(b).name() <<endl;cout << typeid(c).name() <<endl;cout << typeid(d).name() <<endl;return 0;
}

4.如何在同一行定义多个变量?

在同一行声明多个变量时,这一行的变量必须是相同的类型,否则编译器会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

int main()
{auto a= 1, b = 2;auto c = 3, d = 4.0;return 0;
}

5. auto不能推导的场景

1.auto不能作为函数的参数

因为无法知道实参的类型

void TestAuto(auto x)
{}

2.auto不能直接用来声明数组

int main()
{int a[] = {1,2,3};auto b[] = {4, 5, 6};return 0;
}

九、基于范围的for循环(c++11)

不同于平时的for循环。C++11引入了基于范围的for循环。
概念:for循环后的括号由冒号分为两部分:前半部分是范围内用于迭代的变量,后半部分是表示被迭代的范围。

代码举例

int arr[] = { 1,2,3,4,5};
//将数组元素的值都乘以2
for(auto& e : arr)
{e *= 2;
}
//打印数组中的所有元素
for(auto e : arr)
{cout << e << " ";
}
cout << endl;

可以用continue来结束本次循环,也可以用break来跳出整个循环。

1.范围for的使用条件

1.for循环迭代的范围必须是确定的。
对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围。
2.迭代的对象要实现++和==的操作。
以后再详细了解

十、空指针nullptr(C++11)特性

1.在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为关键字引入的。
2.在C++11中,sizeof(nullptr)和sizeof((void*)0)所占字节数相同。
3.为了提高代码的健壮性,在以后的代码中表示指针空值时最好使用nullptr。不建议用C语言中NULL。

植物大战 C++ ——基础特性相关推荐

  1. 针对“扫雷“和“植物大战僵尸“游戏,分析,扫描,阳光值,植物,金币,僵尸的分析逆向

    <软件逆向分析> 2022年9月 目录 {#目录 .TOC-Heading} [一.实验工具介绍 3](#一实验工具介绍) [二.针对"扫雷"游戏 3](#二针对扫雷游 ...

  2. 植物大战僵尸beta贝塔版

    相信大家对于植物大战僵尸这款游戏不会感到陌生,直到现在还备受欢迎,但由于原作不会更新,众多玩家在玩了N遍经典版后有点乏味了,便有不少大佬开始在原作的游戏基础上进行强化修改,从而衍生出了植物大战僵尸be ...

  3. pvz安卓服务器维修礼包码,植物大战僵尸2礼包兑换码大全2020最新版

    植物大战僵尸2礼包码2020最新版是一款能够让玩家体验烧脑塔防大战的放置游戏,拥有经典的游戏规则设计,带来的玩法也会让每个玩家体验最为精彩的体验,每个僵尸都有着自己的特性,游戏之中的每一种植物都有自己 ...

  4. 基于python开发植物大战僵尸

    目录 摘要 2 一, 引言 3 1.1中国游戏产业的现状 3 1.2中国游戏产业的未来发展局势 4 1.3植物大战僵尸游戏的发展状况 4 二.系统结构 5 2.1 Python3.8.2 IDLE 简 ...

  5. 使用js与画布实现小型植物大战僵尸

    相信大家对植物大战僵尸都不陌生,下面我们就利用js和画布来实现一个简易的植物大战僵尸. 第一步:首先得先找好素材,像图片这种这种素材随便去网上找一下就有了,然后给他分好类,主要有:卡片类,僵尸类,植物 ...

  6. 植物大战僵尸2平安时代全新玩法

    说到益智策略类塔防御战游戏,那植物大战僵尸绝对是不二之选,开创了益智策略类塔防御战的新纪元,植物大战僵尸系列包含了全明星.西游版.长城板.原版等众多版本,而最受欢迎的无疑是新添的:植物大战僵尸2平安时 ...

  7. java设计建议植物大战僵尸_基于Java的游戏设计之植物大战僵尸

    植物大战僵尸这款游戏相信大家或多或少都玩过,那么大家有没有想过自己尝试着做一下植物大战僵尸的游戏设计呢.本文将基于Java语言为大家展示如何开发出植物大战僵尸游戏的简易版本,主要内容包括规则.对象.功 ...

  8. 植物大战僵尸2android最新版,植物大战僵尸2

    游戏简介 游戏简介 植物大战僵尸2是经典的植物大战僵尸游戏的续作,在新作中有非常多的新植物和新僵尸出现,还有很多不同富有挑战的新模式,安装安卓模拟器也可以完美实现电脑上运行植物大战僵尸2. 植物大战僵 ...

  9. 植物大战僵尸2android最新版,手机植物大战僵尸2高清版下载官方-植物大战僵尸2高清版 安卓版v2.4.8-PC6手游网...

    <植物大战僵尸2>是<植物大战僵尸>的全新续作.在沿袭了经典的植物防御僵尸玩法的基础上,新增了植物能量.手势道具.僵尸设定图及游戏关卡的选择场景,玩家将可以体验到古埃及.海盗湾 ...

最新文章

  1. int[]到string[]的转换方法 Array.ConvertAll
  2. C语言再学习 -- 字符串和字符串函数
  3. java is a_java中 is - a和 has - a的区别
  4. 万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家
  5. 【转载保存】hadoop三个配置文件的参数含义说明core-site.xml、hdfs-site.xml、...
  6. 0编译器详解_详解Java枚举类型(Enum)中的方法
  7. 利用永恒之蓝入侵服务器复制文件,msf利用永恒之蓝进行漏洞攻击
  8. SpringCloud与SpringConfig分布式配置中心
  9. js接收php 回调,JS callback回调函数的使用(附代码)
  10. 如何为SharePoint添加一个简单地SMTP邮件发送服务器?
  11. 不等式解集怎么取_6.初中数学:一个不等式的解集,都是另一个不等式的解,求a的取值范围?...
  12. 轨迹规划-二次规划QP
  13. vue图片压缩不失真_压缩图片大小(像素)
  14. 调用远程摄像头进行人脸识别_工地如何实现安全帽检测/人脸识别?
  15. WebView打不开或者显示异常可能原因
  16. 戴尔-卡耐基:《人性的弱点 How to Win Friends And Influence People》总结
  17. 点球大战中的概率问题
  18. Android仿ios微信左划条目删除、置顶的实现,代码简洁,更容易理解使用
  19. python撩妹技能_干货必看 | 手把手教你用Python撩妹
  20. Asio Streams, Short Reads and Short Writes

热门文章

  1. python 基础知识汇总
  2. win7+opencv+V2015环境搭建
  3. 公共数据库介绍~联合国数据库UNDATA
  4. 照片的35x45,300dpi怎么弄
  5. JRebel安装、使用
  6. 微信小程序 使用三元运算符动态渲染布局
  7. python爬取去哪网数据_用户观点:企查查数据爬取技术与Python 爬取企查查数据...
  8. linux 文件系统损坏修复方式
  9. B站大佬用我的世界搞出卷积神经网络,LeCun转发!爆肝6个月,播放破百万
  10. linux文件回收站恢复,Linux之恢复误删的文件[针对丢弃到回收站]