IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 第 2 章 开始学习C++ -> 正文阅读

[C++知识库]第 2 章 开始学习C++

目录

2.1 进入C++

2.1.1 main()函数

2.1.2 C++注释

2.1.3 C++预处理器和iostream文件

2.1.4 头文件

2.1.5命名空间

2.1.6 使用cout进行c++输出

2.1.7 C++源代码的格式化

2.2 C++语句

2.2.1 声明语句和变量

2.2.2 赋值语句

2.2.3 cout的新花样

2.3 其它C++语句

2.3.1 使用cin

2.3.2 使用cout进行拼接

2.3.3 类简介

2.4 函数

2.4.1 使用有返回值的函数

2.4.2 函数变体

2.4.3 用户定义的函数

2.4.4 用户定义的有返回值的函数

2.4.5 在多函数程序中使用using编译指令

2.5 总结


本章内容包括:

  • 创建C++程序
  • C++程序的一般格式
  • #include 编译指令
  • main()函数
  • 使用cout对象进行输出
  • 在C++程序中加入注释
  • 何时以及如何使用endl
  • 使用cin对象进行输入
  • 定义和使用简单函数

2.1 进入C++

C++程序的文件名以.cpp为后缀,包含以下元素:

  • 注释,由前缀 // 标识
  • 预处理器编译指令? #include
  • 函数头: int main()
  • 编译指令 using namespace
  • 函数体, 用 { 和 }括起
  • 使用c++ 的cout工具显示消息的语句
  • 结束 main()函数的 return语句

2.1.1 main()函数

int main()
{
    statements
    return 0;
}

main函数描述了该函数的行为。这几行代码构成了函数的定义(function definition)。该定义由两部分组成: 第一行 in main()叫函数头,花括号包含部分叫函数体。函数头对函数与程序其它部分之间的接口进行了总结: 函数体是指出函数应做什么的计算机指令。在C++中,每条完整的指令都称为语句。所有的语句都以分号结束。

?1,main函数是作为接口的函数头

通常,C++函数可被其它函数激活或调用,函数头描述了函数与调用它的函数之间的接口。main()被启动代码调用,而启动代码是由编译器添加到程序中的,是程序和操作系统之间的桥梁。

2,为什么main()不能使用其他名称

通常,C++程序必须包含一个名为main()的函数,不是Main(), MAIN()或者mane()?,大小写都要正确。如果没有main()函数,程序将不完整,编译器将指出未定义main()函数。

存在一些例外情况。例如,在Windows编程中,可以编写一个动态链接库(DLL)模块,这时其它Windows程序可以使用的代码。由于DLL 模块不是独立的程序,因此不需要main(),例如机器人中的控制器新盘-可能不需要main()。

2.1.2 C++注释

C++注释以双斜杠(//)打头。注释是程序员为读者提供的说明,通常标识程序的一部分或解释代码的某个方面。编译器忽略注释。

C++也能识别C注释,C注释包括在符号 /* 和 */之间:

#include<iostream> /* a C-style comment */

由于C风格注释以*/结束,而不是到行尾结束,因此可以跨越多行。在程序中使用C或者C++风格的注释,也可以同时使用这两种注释。但应尽量使用C++注释,因为这不涉及到结尾符号与起始符号的正确配对,所以它产生问题的可能性很小。

2.1.3 C++预处理器和iostream文件

如果程序要使用C++输入或输出工具,请提供这样两行代码:

#include <iostream>
using namespace std;

C++和C一样,也使用一个预处理器,该程序在进行主编译之前对源文件进行处理。不必执行任何特殊的操作来调用该预处理器,它会在编译程序时自动运行。

#include <iostream>该编译指令导致预处理器将iostream文件的内容添加到程序中。这是一种典型的预处理器操作: 在源代码被编译之前,替换或添加文本。

这里提出一个问题: 为什么要将iostream文件的内容添加到程序中呢?答案涉及程序与外部世界之间的通信。iostream中的io指的是输入和输出。C++的输入/输出方案涉及iostream的多个定义。为了使用cout来显示信息,第一个程序需要使用这些定义。#include编译指令导致iostream文件的内容随源代码文件的内容一起被发送给编译器。实际上,iostream文件的内容将取代程序中的代码行#include<iostream>。原始文件没有修改,而是将源代码文件和iostream组合成一个复合文件,编译的下一阶段将使用该文件。

使用cin, cout进行输入和输出程序必须包含文件iostream。

2.1.4 头文件

像iostream这样的头文件叫做包含文件(include file)——由于他们被包含在其它文件中:也叫头文件(header file) ——由于他们被包含在文件的起始处。C++编译器自带了很多头文件,每个头文件都支持一组特定的工具。

C语言的传统是,头文件使用扩展名 h,将其作为一种通过名称标识文件类型的简单方式。例如,头文件math.h支持各种C语言数学函数,但C++的用法变了。现在老式C的头文件保留了扩展名h(C ++程序仍可以使用这种文件),而C++头文件则没有扩展名。

有些C 头文件被转换为C++头文件,这些文件被重新命名,去掉了扩展名 h(使之称为C++风格的名称),并在文件名称前面加上前缀c(表明来自C语言)。例如C++版本的math.h 为cmath。

2.1.5命名空间

如果使用iostream,而不是iostream.h, 则应使用下面的名称空间编译指令来使iostream中的定义对程序可用:

using namesapce std;

这叫做using 编译指令。最简单的办法是,现在接受这个编译指令,以后再考虑它(第九章)。这里先简单的介绍它。

命名空间支持是一项C++特性,旨在让您再编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,还有助于组织程序。一个潜在的问题是,可能使用两个已经封装好的产品,而它们都包含一个名为wanda()的函数。这样,使用wanda()函数时,编译器将不知道指的是哪个版本。命名空间让厂商能够将其产品封装在一个叫做命名空间的单元中,这样就可以用名称来指出想使用哪个厂商的产品。因此,Microflop Industries可以将其定义放在一个名为Microflop的名称空间中。这样,其wanda()函数的全称为 Microflop::wanda(),?同样,Piscine公司的wanda()版本可以表示为Piscine::wanda()。这样,程序就可以使用名称空间来区分不同的版本了。

按照这种方式,类,函数和变量便是C++编译器的标准组件,它们现在都被放置在名称空间std中。仅当头文件没有扩展名h时,情况才是如此。这意味着在iostream中定义的用于输出的cout变量实际上时std::cou,而endl实际上时std::endl。因此可以省略编译指令using。

然而大多数用户不喜欢将引入名称空间之前的代码(使用iostream.h和cout)转换为名称空间代码(而使用iostream和std::cout),除非他们可以不费力地完成这种转换。于是,using编译指令应允而生。

2.1.6 使用cout进行c++输出

C++中的打印语句

cout<< "Come up and C++ me some time.";

双引号括起来的部分是要打印的消息。在C++中,用双引号括起的一系列字符叫做字符串,因为它是若干字符组合而成的。<<符号表示该语句将把这个字符串发送给cout,该符号指出了信息流动的路径。cout是什么呢?它是一个预定义的对象,知道如何显示字符串,数字和单个字符等。

从概念上看,输出是一个流,即从程序流出的一系列字符。cout对象表示这种流,其属性是在iostream文件中定义的。cout对象属性包括一个插入运算符(<<),它可以将其右侧的信息插入到流中。

?1, 控制符endl

endl是一个特殊的C++符号,表示一个重要的概念:重起一行。

2,换行符

C++还提供了另一种在输出中指示换行的旧式方法:C语言符号 \n。\n是一个字符,名为换行符。

cout << "\n";  //start a new line
cout << endl;  //start a new line

2.1.7 C++源代码的格式化

在C++中,分号标示了语句的结尾。因此,C++中,回车的作用域和空格或制表符相同。也就是说,在C++中,通常可以在能够使用回车的地方使用空格,反之亦然。

1, 源代码中的标记和空白

一行代码中不可分割的元素叫做标记(token)。通常,必须使用空格、制表符或回车将两个标记分开,空格、制表符和回车称为空白(white space)。有些字符(如括号和逗号)是不需要用空白分开的标记。

2, C++ 的源代码风格

  • 每条语句占一行
  • 每个函数都有一个开始花括号和一个结束花括号,这两个花括号各占一行。
  • 函数中的语句都相对于花括号进行缩进
  • 与函数名称相关的圆括号周围没有空白

2.2 C++语句

2.2.1 声明语句和变量

计算机是一种精确的、有条理的机器。要将信息项存储在计算机中,必须指出信息的存储位置和所需的存储空间。在C++中,完成这种任务的一种相对简便的方法,是使用声明语句来指出存储类型并提供位置标签。

int carrots;

该条语句提供了两项信息:需要的内存以及该内存单元的名称。具体地说,这条语句指出程序需要足够的存储空间来存储一个整数,在C++中用int表示整数。编译器负责分配和标记内存的细节。完成第二项任务是该存储单元指定名称。在这里,该声明语句指出,此后程序将使用名称carrots来标识该内存单元的值。在C++中,所有的变量都必须声明。

为什么变量必须声明?

有些语言(最典型的是BASIC)在使用新名称时创建新的变量,而不用显式地进行声明,这看上去对用户比较友好,事实上从短期来说确实如此。问题时,如果错误的拼写了变量名,将在不知情的情况下创建了新的变量。在C++中,“使用变量前必须声明它”的原则,编译器可以捕获这种这种拼写错误。

程序中的声明语句叫做定义声明语句,简称为定义。这意味着它将导致编译器为变量分配内存空间。在较为复杂的情况下,还可能有引用声明。这些声明命令计算机使用在其它地方定义的变量。声明不一定时定义。

2.2.2 赋值语句

赋值语句将值赋给存储单元。符号=叫做赋值运算发。C++(和C)有一项不寻常的特性-可以连续使用赋值运算符。例如如下代码时合法的。

int steinway;
int baldwin;
int yamaha;
yamaha = baldwin = steinway =88;

赋值将从右向左进行。首先,88被赋值给steinway,然后,steinway的值(88)被赋给baldwin,然后baldwin的值88被赋值给yamaha。

2.2.3 cout的新花样

cout打印变量,该变量的值时一个整数:

cout << carrots;

程序没有打印“carrots", 而是打印存储在carrots中的整数值,即25. 实际上,cout是将两个操作合而为一了。首先,cout将carrots替换为当前值25,然后,把值转换为合适的输出字符。

C使用打印用 %s, %d指出将要打印的是字符串还是整数。如果让printf()打印字符串,但又错误地提供了一个整数,由于printf不够精密,因此根本发现不了错误。它将继续处理,显示一堆乱码。

cout的智能行为源自C++的面向对象特性。实际上,C++插入运算符(<<)将提供其后的数据类型相应地调整其行为,这是一个运算符重载的例子。

2.3 其它C++语句

2.3.1 使用cin

cin >>carrots;

这条语句标识,信息从cin流向carrots。就像C++将输出看作是流向程序的字符流一样,它也将输入看作是流入程序的字符流。iostream文件将cin定义为一个标识这种流的对象。输出时, <<运算符将字符串出入到输出流中;输入时,cin使用>>运算符从输入流中抽取字符。通常,需要在运算发右侧提供一个变量,以接收抽取的信息。与cout一样,cin也是一个智能对象。

2.3.2 使用cout进行拼接

getinfo.cpp中的另一项新特性是将4条输出语句合并为一条。iostream文件定义了<<运算符, 以便可以像下面这样合并(拼接)输出:

cout << "Now you have" << carrots << " carrots."<<endl;

C ++的自由格式规则将标记间的换行符和空格看作是可以互相替换的。?

2.3.3 类简介

类是用户定义的一种数据类型。要定义类,需要描述它能够标识什么信息和可对数据执行哪些操作。类之于对象就像类型之于变量。也就是说,类定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。换句话说类就好比所有著名演员,则对象就好比某个著名的演员。

2.4 函数

2.4.1 使用有返回值的函数

有返回值的函数将生成一个值,而这个值可赋给变量或在其它表达式中使用。例如,标准C/C++库包含一个名为sqrt()的函数,它返回平方根。假设要计算6.25的平方根,并将这个值赋给变量x,则可以在程序中使用下面的语句:

x=sqrt(6.25);

表达式sqrt(6.25)将调用sqrt()函数。表达式sqrt()被称为函数调用,被调用的函数叫做调用函数,包含函数调用的函数叫做调用函数。

C++库函数存储在库文件中。编译器编译程序时,它必须在库文件搜索您使用的函数,因编译器而异。有时可能编译器不能自动搜索数据库,如提示_sqrt是一个没有定义的外部函数,如果在UNIX实现中遇到这样的消息,可能需要在命令行结尾使用 -lm 选项:

CC sqrt.C -lm
g++ sqrt.C -lm

2.4.2 函数变体

有些语言中,有返回值的函数被称为函数;没有返回值的函数被称为过程(procedure)或子程序(subroutine)。但C++与C一样,这两种变体都被称为函数。

2.4.3 用户定义的函数

标准C库提供了140多个预定义的寒素。但用户经常需要编写自己的函数,尤其在设计类的时候。

?函数格式

type functionname(argumentlist)
{
    statements;
}

关键字

关键字是计算机语言中的词汇。比如 int, void, return, double。这些关键字都是C++专用的,因此不能用作他用。也就是说,不能将return用作变量名,也不能把double用作函数名。

2.4.4 用户定义的有返回值的函数

函数原型描述了函数接口,即函数如何与程序的其它部分交互。参数列表指出了何种信息将被传递给函数,函数类型指出了返回值的类型。

?

?

2.4.5 在多函数程序中使用using编译指令

让程序能够访问名称空间std的方法有多种,下面是其中的4种。

  • 将 using namespace std; 放在函数定义之前,让文件中所有的函数都能够使用命名空间std中所有的元素。
  • 将using namespace std; 放在特定的函数定义中,让该函数能够使用名称空间std的所有元素。
  • 在特定的函数中使用类似 using:: cout; 这样的编译指令,而不是using namespace std; 让该函数能够使用指定的元素,如cout。
  • 完全不使用编译指令using,而在需要使用名称空间std中的元素时,使用前缀std::。

2.5 总结

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:37:50  更:2021-08-02 10:38:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:17:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码