C++基础知识与开发环境【修订版】

C++基础知识与开发环境【修订版】

C++ 由C语言发展而来,几乎完全兼容C语言;换句话说,你编写的C语言代码几乎可以不加修改地用于 C++。

相对于C语言,C++语言对C语言的功能做了一定的扩充,同时增添了面向对象编程以及泛型编程机制。

随着C++发展,多数人认为,成了一门独立的语言,学C++之前完全没有必要学C,而C是面向过程的程序设计,C++的核心是面向对象的程序设计,C++支持多种程序设计风格,包括面向过程的程序设计,面向对象程序设计,泛型程序设计。C++ 和C这两个语言是平等的两种语言。

信息学竞赛主要分为NOIP(全国青少年信息学奥林匹克联赛/分区联赛)、NOI(全国青少年信息学奥林匹克竞赛)、冬令营、选拔赛、IOI(国际信息学奥林匹克竞赛)这几个级别的比赛,使用的语言就有C++。

程序设计中的基本概念

程序(Program)告诉计算机应如何完成一个任务的一组指令( A set of instructions),用于指定操作、操作数和处理必须遵循的顺序。

电脑程序设计(Computer programming),或称程序设计(programming),是给出解决特定问题程序的过程,程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程一般包括分析、设计、编码、测试、调试等不同阶段。

编程语言(programming language)又叫程序设计语言(program design language, PDL),是用来定义计算机程序的形式语言。泛指一切被标准化用来向计算机发出指令系统。如C/ C++、python等。

关于程序设计中的基本概念可参考:程序设计中的基本概念_软件开发技术爱好者的博客-CSDN博客_软件程序设计

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的编程语言,支持过程化编程、面向对象编程和泛型编程。

常用C++学习环境简介

Dev-C++ 是Windows环境下的轻量级C/C++ 集成开发环境,自由开源。Dev-C++ download | SourceForge.net

上次更新时间为2015年4月到Dev C++5.11。已停止维护了。

现在出现了一些​(目前依然在稳定运行的)分支版本:

(1)embarcadero Dev cpp,网址:GitHub - Embarcadero/Dev-Cpp: A fast, portable, simple, and free C/C++ IDE

国外开发者 FMXExpress 等人在 Embarcadero 公司支持下继续开发 Embarcadero Dev-C++。Embarcadero Dev-C++是原版Dev-C++的继承和发展。C++程序使用Embarcadero Dev-C++注意事项  https://blog.csdn.net/cnds123/article/details/128715404

(2)小熊猫Dev-C++ 网址 小熊猫C++

 或 小龙Dev-C++  小龙 Dev-C++ 中文主页

(3)、 Code::Blocks

简单,体积小,专注于编程,win+linux双环境支持,一个开放源码的全功能的跨平台C/C++集成开发环境。 CodeBlocks官网

Code::Blocks - Code::Blocks

Windows 用户C++程序使用codeblocks集成开发环境注意事项 https://blog.csdn.net/cnds123/article/details/128728379

(4)、VSCode+gcc+cmake

可以管理,写一些大型的项目,但是需要做一些配置,可能要花点时间搞懂。

参见 VScode配置C/C++编程总结(GCC+Clang+CMake)VScode配置C/C++编程总结(GCC+Clang+CMake)_zhou_haha的博客-CSDN博客_gcc vscode

Dev C++5.11安装使用简介

目前国内学校教学、信息学竞赛主要使用Dev-C++,故对Dev C++5.11安装使用简要介绍。(或用Embarcadero Dev-C++,两者界面和使用基本相同)

Dev-C++开发环境下载官网:

Dev-C++ download | SourceForge.net

下载完成后,就像安装其它软件一样,点击安装包,稍等一会儿出现如下图,

语言先默认选择English,不要改变(安装完成后会选择中文简体的选项设置)。点ok!

接下来的安装界面点“I agree”按钮,参见下图:

之后,点击“next”按钮,参见下图:

可以改变默认安装位置,参见下图:

单击“Install”,请等待一会,出现下图界面:

单击“Finish”按钮,完成Dev-C++安装。

此时为英文界面,如果你想改为中文界面,点击菜单栏中“Tools"的"Environment Options"命令项,参见下图操作:

最后单击“OK”按钮确认即可!

文本为防止引发翻译可能造成的歧义,采用英文界面。

Dev C++的主界面

Dev C++的主界面主要由菜单栏、工具栏、项目管理器(也称为项目/类浏览器)、源码编辑区、报告窗口和状态栏组成,参见下图:

下面介绍C++ 基本语法

☆C++ 中的分号

在 C++ 中,分号是语句结束符。也就是说,每个语句通常以分号结束。它表明一个逻辑实体的结束。

例如,

x = y; // 赋值语句

y = y+1; // 赋值语句

int x = 5; // 变量声明和初始化语句

cout << "Hello, world!"; // 输出语句

x++; // 表达式语句,对变量进行自增操作

for (int i = 0; i < 5; i++) { // 循环语句

    cout << i;

}

需要注意的是,有一些特殊情况下不需要分号:

在类定义中的成员函数定义,函数体不需要分号;

在命名空间定义中,命名空间体也不需要分号;

在枚举类型定义中,如果最后一个枚举常量后面跟着花括号,则不需要分号;

某些预处理器的指令(如 #define、#include 等),在其内容后面是不需要分号的。

☆语句块

语句块是一组使用大括号括起来的按逻辑连接的语句。例如:

{

   cout << "Hello World"; // 输出 Hello World

   return 0;

}

C++ 不以行末作为结束符的标识,因此,您可以在一行上放置多个语句。例如:

x = y;

y = y+1;

等同于

x = y; y = y+1;

☆C++ 中的空格

空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:

int age;

在这里,int 和 age 之间必须至少有一个空格字符,这样编译器才能够区分它们。另一方面,在下面的语句中:

total = quantity1 + quantity2;  

total 和 =,或者 = 和 quantity1 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。

运算符、关键字等符号前后可有任意个空格。与C一样,C++中,空格用来占位,并没有实际的内容,对于编译器,除由" "包围起来的字符串中的空格不会被忽略,其它的空格会被忽略。善用空格、缩进和空行可以让代码结构更加清晰。

C++ 标识符

C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

C++ 标识符内不允许出现标点字符,比如 @、& 和 %。标识符区分大小写,C++ 是区分大小写的编程语言。标识符不允许使用关键字作为其名称。

【C++17(SO/IEC 14882:2017)允许标识符 由Unicode字符(如中文)组成,但是C++编译器可能对Unicode标识符的支持程度有所差异。建议不要使用_开头】

☆C++ 中的关键字(keyword)又称保留字,如auto、else、new、this等不能作为常量名、变量名或其他标识符名称。C++区分大小写,关键字全部由小写字母组成。

建议使用有一定含义的英文单词或拼音序列作标识符,以提高可读性;另外,尽量不用下划线或双下划线打头,以免与系统定义的关键字冲突。

常用关键字及分类见下表

数据类型说明符与修饰符

bool、char、wchar_t、class、const、double、enum、float、int、long、short、signed、struct、union、unsigned、void、volatile

存储类型说明符

auto、extern、inline、register、static

访问说明符

friend、private、protected、public

其它说明符

asm、operator、template、this、typedef、virtual

语句与标号

break、case、catch、continue、default、do、else、for、goto、if、return、switch、throw、try、while

运算符及逻辑值

delete、false、new、sizeof、true

C++源程序代码以扩展名为.cpp的文件形式保存在磁盘上,经编译、连接生成可执行程序,即扩展名为.exe的文件。

下面通过一个简单的程序例子来分析C++程序的基本构成及主要特点。

例、一个简单的C++程序:输入两个整数,通过调用函数求两个数中的较大值。

#include <iostream>

using namespace std;

int max(int i, int j){      /*定义max()函数*/

    if (i>=j) return i;

    else return j;

}

int main(void){                  /*定义main()函数*/

   cout<<"输入i,j 两数之间用空格分隔:";           //显示提示信息

   int i, j;                      //说明变量

   cin>>i>>j;                  //接受键盘输入的变量值                                                                                                  

   cout<<"最大数是:"<<max(i, j)<<'\n';   //输出提示信息和结果

   return 0;

}

说明:

C++的程序结构由注释、编译预处理指令和程序主体组成。

☆  注释:注释内容不参与编译,仅供程序阅读使用,编写程序时可根据需要选取。

注释有两种形式:

以“//”开头,至所在行结尾处(换行符之前)之间的内容。

以“/*”开头和“*/”结尾,两者之间的内容均为注释,可占多行。

☆  编译预处理:以符号“#”引出,一条指令也需在一行内写完。

例中的#include命令,称为“文件包含指令”,它使得后面被包含文件成为本程序的一个组成部分,被包含文件中的代码可以直接被使用。编译预处理是C++提供的组织程序的工具,有关内容在后面介绍。

☆C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespace。using namespace std;表示使用标准命名空间。举例说明:假设有两个开发者或两家公司A,B,封装好了两个产品,程序中都包含了一个fun()函数,问题来了,怎么区分哪个是A,哪个是B呢?这是名称空间起了作用,实际上A公司的fun()函数全称:A::fun(),B公司的则为:B::fun(),使用了名称空间,就可以省去fun()的前缀。

☆  程序主体:一般由一个或多个函数组成,但只有一个函数是程序入口,即代码执行的起点。如本例由max()和main()两个函数组成,函数main()是所有控制台程序程序的入口。

在传统的Windows操作系统编程中,入口由系统定义为Winmain()函数。

任一函数的描述都是包括在一对 “{”和“}”中的语句序列,每个语句以“;”结束。关于函数的详细知识以后介绍。

输出一个换行符,可以使用\n,这是一个转义序列(转义符);还可以使用预定义常数endl,“end line”的缩写。

在c++中,有一些特定的字符,当他们前面有反斜杠时,就具有特殊的含义,被用来表示换行符或制表符等,下表列出了一些这样的转义序列:

转义序列

含义

\\

\字符

\'

'字符

\"

"字符

\?

?字符

\a

警报铃声

\b

退格键

\f

换页符

\n

换行符

\r

回车

\t

水平制表符

\v

垂直制表符

\ooo

一到三位的八进制数

\xhh

一到多位的十六进制数

C++中严格区分大小写,但不严格限制程序的书写格式,不过从可读性角度出发,程序书写应采用内缩格式,一般一个语句占一行。

C++中使用的标点符号,如()"" '' + - * /:,等等是半角英文的,字符串中(字符串内部)的除外。新手要特别注意这点。

【全角和半角

☆全角:是一种电脑字符,占两个字节。

在全角中,字母和数字等与汉字一样占据着等宽的位置。

☆半角:是指一个字符占一个字节。

半角是ASCII方式的字符。 】

现在演示用Dev-C++编译运行上面的例子

打开Dev-C++,输入上例代码,参见下图:

编译运行,参见下图:

C++ 基本的输入输出
在C语言中,我们通常会使用 scanf 和 printf 来对数据进行输入输出操作。在C++语言中,C语言的这一套输入输出库我们仍然能使用,但是 C++ 又增加了一套新的、更容易使用的输入输出库。
 C++ 头文件iostream定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
【C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。】
流插入运算符 <<和流提取运算符 >> 
cout、cerr、clog与流插入运算符 << 结合使用。

例、
#include <iostream>
using namespace std;
 
int main( )
{
   char str[] = "Hello C++";
   cout << "Value of str is : " << str << endl;
}
说明
endl 是“end of line”的缩写,用于在行末添加一个换行符。

cin与流提取运算符 >> 结合使用,例
#include <iostream>
using namespace std;
 
int main( )
{
   char name[50];
   cout << "请输入您的名称: ";
   cin >> name;
   cout << "您的名称是: " << name << endl;

}

cin与cout解释

cin用来在程序执行期间给变量输入数据,一般格式为:

cin>> <变量名1>[>> <变量名2> >>…>> <变量名n>];

其中:>> 称为“提取运算符”,程序执行到这条语句便暂停下来,等待从键盘上输入相应数据,直到所列出的所有变量均获得值后,程序方继续执行。

cout实现将数据输出到显示器的操作,一般格式为:

cout<< <表达式1> [<< <表达式2> <<…<< <表达式n>];

其中:<<  称为“插入运算符”,将紧跟其后的表达式的值输出到显示器上当前光标位置。

cin和cout的书写形式很灵活,如果有多个变量,即使类型不相同,也可以写在同一个语句中或者分成若干个语句输入或输出。

cin可以同时为多个变量输入数据,在各输入数据之间用一个或多个空白(空格,回车,Tab)作为间隔符,按Enter键结束。

下面是cin的示意图:

cin>>x1>>x2>>x3;

等价于

cin>>x1;

cin>>x2;

cin>>x3;

析取运算符>>后只能出现变量名,且应该是系统预定义的简单类型。

cin 能够自动识别数据类型。

int a,b;

char c;

double d;

cin>>a>>b>>c>>d;

可以输入:23 34 A 34.5。

下面是cout的示意图:

 C++ 头文件<iomanip>是I/O流控制头文件,就像C里面的格式化输出一样。<iomanip>是C++标准库中的头文件,用于控制输入输出流的格式化。<iomanip>头文件常用于控制标准输出流的格式,例如设置输出浮点数时的位数、调整对齐方式、设置填充字符等等。可参见https://blog.csdn.net/cnds123/article/details/132045856 一文

输出格式测试例:

#include <iostream>  
#include <iomanip>      
using namespace std ;  
int main()  
{  
    double PI=3.141592654;

    cout<<PI<<endl;  
    cout<<setprecision(2)<<PI<<endl;  
    cout<<fixed<<setprecision(2)<<PI<<endl;   
    cout<<setfill('*')<<setw(20)<<setprecision(10)<<PI<<endl;  
    cout<<setfill('*')<<setw(20)<<setprecision(10)<<left<<PI<<endl;  
    cout<<scientific<<setprecision(10)<<PI<<endl;  
    cout<<scientific<<uppercase<<setprecision(10)<<PI<<endl;    
    return 0 ;  
}

运行之,参见下图:

使用控制符hex、dec和oct的例

#include<iostream>
using namespace std;

int main()
{
 int x =64;
 cout<<dec<<x<<" "<<hex<<x<<" "<<oct<<x<<endl;
 return 0;
}
 

运行结果如下:

一行可以书写多个语句
语句之间用分号隔开即可,例如:
x = y;
y = y+1;
也可以写为:
x = y; y = y+1;
从可读方面来看,不建议这么做。

C++多行语句
一行较长的语句可以分行写,规则如下:
1. 预处理一行写不下:
把一个预处理(如define定义的宏)写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成。
2. 字符串常量跨行
在行尾使用“\”,然后回车换行,就可以将字符串常量跨行书写,注意下一行要顶格写;对于长的字符串要多行书写的方法,还可将它分行写成多个字符串,
3. 运算符、关键字的换行,可以在其之后直接换行
例、

#include<iostream>
using namespace std;
#define PI (2.141 +\
1)  //宏跨行,需要用续行符
int main()
{
  int x =64;
  cout<<PI<<endl;
  //字符常量跨行,使用续行符\,注意下一行要顶格写 
  cout<<"Hello, W\
orld!"<<endl; 
  // 对于长的字符串要多行书写的方法,还可将它分行写成多个字符串
  cout<<"这是C++程序"
   "设计示例!"<<endl;
  //运算符、关键字的换行,见下面的3行 
  float
  y = 
  10*2;
  cout<<y<<endl;

 return 0;
}

运行之,参见下图:

C++ 程序书写规范:

 每个说明和每条语句都必须以分号“;”结尾(预处理命令,函数头和花括号“ } ”之后除外)。

 标识符,关键字之间必须至少加一个空格表示间隔,若已有明显的间隔符,也可不再加空格来间隔。

 习惯用小写字母,区分大小写。

 注释:单行注释用// ,多行注释用 /* */。

 常用锯齿(缩进)形书写格式。

 所有标点符号必须在英文状态下输入。

C++ 源程序结构:

 一个 C++ 源程序由一个或多个源文件组成。

 每个源文件可由一个或多个函数组成。

 一个源程序有且只能有一个 main 函数。

 源程序中可以有预处理命令,通常应放在源文件或源程序的最前面。

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目录 1. 简介 怎样使用本教程 2. C++基础 Basics of C++ 1. C++程序结构 Structure of a program 2. 变量和数据类型 Variables and Data types 3. 常量 Constants 4. 操作符/运算符 Operators 5. 控制台交互 Communication through console 3. 控制结构和函数 Control structures and Functions 1. 控制结构 Control Structures 2. 函数I Functions I 3. 函数II Functions II 4. 高级数据类型 Advanced Data 1. 数组 Arrays 2. 字符序列 Character Sequences 3. 指针 Pointers 4. 动态内存分配 Dynamic memory 5. 数据结构 Data Structures 6. 自定义数据类型 User defined data types 5. 面向对象编程 Object-oriented Programming 1. 类,构造函数和析构函数,类的指针 Classes. Constructors and Destructors. Pointers to classes. 2. 操作符重载,this,静态成员 Overloading Operators. this. Static members 3. 类之间的关系 Relationships between classes: friend. Inheritance 4. 虚拟成员,抽象,多态 Virtual Members. Abstraction. Polymorphism 6. C++高级 Advanced concepts 1. 模板 Templates 2. 名空间 Namespaces 3. 出错处理 Exception handling 4. 类型转换高级 Advacned Class Type-casting 5. 预处理指令 Preprocessor Directives 7. C++ 标准函数库 C++ Standard Library 1. 文件的输入输出 Input/Output with files C++基础教程简介 怎样使用本教程 读者范围 本教程面向所有希望学习C++语言的读者。如果读者有其他编程语言背景或计算机相关基本知识可以帮助更好的理解教程内容,但这并非必须条件。 对于C语言熟悉的读者可将前三章(1.1 到 3.4)当作复习,因为这部分内容主要介绍C++中的C部分。不过某些C++的语法与C还是有些差别,所以建议还是快速的读一下这部分。 第四章讲述面向对象编程。 第五章主要介绍ANSI-C++标准中的新增的功能。 本教程结构 教程共分6章,每章分若干小节。你可以直接从主目录进入任意小节,并循每页底部的链接向后浏览。 很多小节含有一页例题介绍该章节主要知识点的使用。建议在进入下一章学习之前最好先阅读这些例题,理解每行代码。 学习和练习一种编程语言的最好办法是自己修改书中例题程序,设法在程序中增加新的功能。不要不敢修改这些例题程序,这正是学习的方法。 兼容性备注 ANSI-C++标准近几年来被接受为国际标准。尽管C++语言从二十世纪80年代即存在,ANSI-C++在1997年才被发表,2003年又被修订过。因此很多编译器不支持ANSI-C++中的部分新功能,特别是那些在此标准发表前即被发布的编译器。 在本教程中,那些ANSI-C++中新增的而老一代C++编译器大多不支持概念将备用如下标志标出: ANSI C++新增的概念 同样对于C和C++在实现上有明显不同的概念,将备用如下标志标出: C 与 C++不同的地方 编译器 本教程中所有例题程序均为console程序(控制台程序)。此类程序以文本形式与用户交换信息,显示结果。 所有C++编译器均支持console程序的编译。要了解更多关于如何编译的说明,请查询你的编译器用户使用手册。 C++编译器和开发环境推荐 很多读者询问编译器和开发环境的问题。除了常用的商用收费的MS Visual Studio, VC++,Borland C++等工具外,还有很多免费的工具也是很好用的。这里推荐两种免费的C++开发软件: 1、Eclipse的CDT开发工具,官方网站在http://www.eclipse.org/cdt/ 2、开源工具Dev-C++和wxDev-C++

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值