【C++】基本语法——从入门到弃坑的第一天

CPP:从入门到弃坑。

2018-2019学年度寒假CPP学习计划。

教材:C++ Primer Plus

第一天:CPP的基本语法
第二天:函数,名称空间
第三天:结构与类,继承
第四天:string
第五天:STL:vector
第六天:STL:stack
第七天:STL:map,set

第一天:CPP的基本语法

开始 权当复习

一.CPP的历史摘要

首先简单介绍一下,C++,又称CPP(C Plus Plus),是Bjarne Stroustrup基于C语言开发的一种编程语言。
我个人认为与其说是基于C语言,不如说是C语言的拓展。C++的名字中的++来源于C语言中的++(自增)运算符,意味着CPP是C语言的拓展与升级
CPP相较C而言,CPP提供了丰富的摸板(比如说向量,快排,max与min,双向队列),这一特性使得泛型编程变得可能。同时也正是因为这些模板的存在,CPP的实用性更高,因此我们认为CPP是一门中层编程语言,而C语言是一门底层编程语言
P.S:这里的中层,底层指的不是逼格高低,而是指从硬件操控到逻辑操控的这样一个过渡过程中的上中下层。例如,汇编是最底层的编程语言,因为汇编是直接操控硬件的。

介绍到此结束,详细的,百度百科见

二.CPP的基本输入输出。

之前提到过,CPP是C语言的扩展升级。所以CPP的【基本】语法与C语言是一致的,所有C语言的语法都可以在CPP代码中使用。但是CPP有着一些新特性。现在让我们来看一段代码:

#include//c++基本头文件:流式输入输出 
//using std::cin;
//using std::cout;
//using std::endl;
using namespace std;//这一句的效果大于上面三句之和,十分偷懒 
int main(){
 int year,m;
 cout<<"请输入今年的年份:";//cout:流式输出 
 cin>>year;                 //cin:流式输入 
 cout<<"请输入当前月份";
 scanf("%d",&m);            //scanf同样可以使用!
 cout<<"Hallo "<

运行结果如下:
【C++】基本语法——从入门到弃坑的第一天_第1张图片

1.流式输入输出

相较C语言,CPP提供了一种新的读写方式:流式读写。cin和cout分别式流式输入和流式输出的【类对象】(为什么这里不说它是函数?)通常情况下,cin和cout可以与scanf与printf并存。但是由于流式读写的原理与printf和scanf的原理不同,若在同一个程序中同时使用了这两种不同的读写方式,会造成很大的时间资源开销,一般情况下会在一个程序中选用流式读写和格式化读写中的一种。这里只是为了演示cin和cout的作用才这么去做。

cin:流式输入。不同于scanf需要%c,%d等特殊代码来标志输入的数据类型是什么,cin会自动选择数据类型来为目标对象赋值。而且使用cin不需要&符号来为变量赋值

cout:流式输出。不同于printf需要%c,%d等特殊代码来标志输出的数据类型是什么,cout会根据参数来自动选择数据类型进行输出。

endl:换行,类似\n的作用。但是endl还有一些副作用,速度比\n慢的多,建议一般情况下用\n代替endl

以上三者都使用名称空间std

2.头文件

C语言使用stdio.h作为基础头文件,而CPP使用iostream作为头文件。

iostream的文件名字来源,io为input和output的缩写,stream的意思是“流”。统合起来就是【流式输入输出】。

注意!

#include

#include

#include

不是iostream.h。CPP新式风格的头文件,约定为没有拓展名。来自C语言的标准库转换为CPP标准库后,会去掉.h并加上前缀c,例如:.

在c语言中引用字符类型库:#include

CPP中引用字符类型库:#include

在c语言中引用标准数学与运算库:#include

CPP中引用标准数学与运算库:#include

3.使用名称空间

大家可以注意到,代码中有三个全局的using声明。std是cin,cout等标准类所在的名称空间,这里简单介绍一下名称空间,关于它我们以后会接触到详细的内容
(就好像我们在本学期学习C语言时先学习了如何用printf输出Hallo
world之后过了很久才详细学习printf的参数一样)

CPP允许为函数添加名称标签,以防止名称污染导致的无名可用。

这么说很抽象,现在我们举个例子:

张三和李四在同一家互联网公司工作。现在他们都被分配到了一个任务:编写一个名为date的具有输出日期功能的函数并要放在同一个源文件中使用。

在C语言中,同一份源文件时不允许有两个同名的函数的,然而CPP可以通过添加名称空间来区别不同的函数版本。比如:

namespace Zhangsan{//张三的名称空间
date();
}

namespace Lisi{//李四的date函数
date();
}

这样就允许两个相同名称的函数出现在同一个源文件中并通过编译了。
现在话题回到我们的using

using std::cin;
using std::cout;
using std::endl;

在这三个全局声明中,std是cin,cout,endl使用的名称空间,而using的意思就是:在其作用范围内的cin,cout,endl自动使用名称空间std,这样的用法叫做using声明

偷懒点,我们可以把那三个using声明换成:

using namespace std;//这条语句作用范围内的所有函数/类都使用名称空间std

这种用法叫做using编译指令

目前,以及未来一段时间内,我们学习讨论的都是短代码,可以大胆放肆地使用using namespace std。但是在大型项目中,这个偷懒的using编译指令是一个隐患,十分不建议使用

Q:如果我地代码中没有using std::cin;或using
namespace std;,那么我要怎么使用cin?

A:using std::cin“类似”于C语言中的宏,它会自动的将代码中的cin“转换为“std::cin

你可以尝试写一段代码如下:

int m;

std::cin>>m;

std::cout<

三.数据类型的新特性

同样的,我们从一段代码开始:

#include//流式输入与输出 
#include  //C++中定义string类型的头文件,不是C中的string.h 
#include //C语言中的string.h
const int MAX=100;//在C++中建议使用const定义常量而不是#define 
void print_b(int *b);//普通的函数声明,同C语言一样 
int main(){
 using namespace std;//注意这个using声明的位置 
 int b[MAX]{1,2,3,4,5};//C++风格的数组声明,不需要等号 
 print_b(b);
 
 char a[MAX]="The type of this str is const char* \n";
 //字符串字面量还是需要等号的 
 cout<

【C++】基本语法——从入门到弃坑的第一天_第2张图片

从代码中我们可以看到,我们引入了一个新的数据类型:string,还有在C语言中需要调用stdbool.h才能启用的bool类型。在CPP中,bool类型于string类型是基本类型,包含于iostream中
在一些特殊情况下,string类型可能需要

#include

才能够使用

Bool类型在此不再详细介绍,使用方法同C语言。

String类型则是类似于字符串指针的新类型,但是它远比字符指针强大:

1.string类允许使用>,<,>=,<=,==,!=等符号判断两个string变量的大小;

2.string字符串的拼接可以直接使用+,+=两个符号进行【直接拼接】,效果类似C语言中的strcat(char *s1,char*s2)

3.string类可以修改其储存的字符串,程序会自动为其分配内存空间。而字符指针不能被随意修改

4.同其他类型一样,string类也可以创建数组,并且这样的数组不会像二维字符数组那样有未用空间的浪费。

你可能感兴趣的:(编程学习)