【C++ Primer Plus】基础知识 1

简介: 【C++ Primer Plus】基础知识

进入C++

main()函数

例:

int main ()
{
    statements
    return 0;
}

 这几行代码构成了函数定义(function definition),该定义由两部分组成:

 第一行int main()叫做函数头(function hesding),花括号中包括的部分叫做函数体

函数头对函数和程序的其他部分之间的接口做了总结,函数体是指出函数应该做什么的计算机指令。每条完整的指令都成为语句,所有的语句都以分号结束。main()函数中的最后一条语句叫做返回语句(return statement),它用来结束该函数。

函数名前面的部分叫做函数返回类型,它描述的是从函数函数给调用它的函数的信息。函数名后括号中的部分叫做形参列表或参数列表,它描述的是从调用函数传递给被调函数的信息。

来看主函数的接口描述,该接口从int开始,可知,main()返回一个整数值。接下来是空括号,表示main()函数不接受任何信息,或者说,main()函数不接受任何参数。

一般也可以写作:

int main (void)

这里使用了关键字void,明确地指出了函数不接受任何参数。

 对于返回语句,C++在main()函数中,可以省略,当编译器到达main()函数末尾时,没有遇到返回语句,则认为main()函数以如下语句结尾:

return 0;

但是这仅仅适用于main()函数,而不适用于其他函数。

C++注释

 C++注释以//打头,必要的注释解释代码可以增加程序的可读性。

C++预处理器和iostream文件

 如果程序要使用C++输入(cin)和输出(cout)工具,需提供一下这样的两行代码:

#include <iostream>
using namespace std;//可使用其他程序替换简化程序

预处理器:

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

#include 编译指令:

#include <iostream>

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

#include 编译指令导致iostream文件中的内容随源代码文件的内容一起被发送给编译器。

 实际上,iostream文件的内容将取代程序中的代码行#include<iostream>,原始文件没有被修改,而是将源代码文件和iostream组合成一个符合文件,编译的下一个阶段将使用该文件。

头文件名

 像iostream这样的文件叫做包含文件(include file)——由于它们被包含在其他文件中;也叫做头文件(header file)——由于它们被包含在文件起始处。

名称空间

 命名空间是C++的新特性,它能解决命名冲突问题。

例如,小明定义了一个函数swap(),C++标准库中也存在一个swap()函数,此时,为了区分调用的是哪个swap()函数,可以通过命名空间来标识。

 C++中的命名空间包括两种,一种是标准命名空间,一种是自定义命名空间

std是C++标准命名空间,由于C++标准库几乎都定义在std命名空间中,因此编写的所有C++程序都需要引入下列语句:

using namespace std;

使用namespace可以自定义命名空间,示例代码如下所示:

namespace lib
{
    void fun(){}
}

上述代码中,使用namespace定义了一个名称为lib的命名空间,该命名空间内部定义了一个func()函数。

  如果要使用命名空间中定义的元素,有下列三种方式:

1.使用“命名空间::元素”方式指定命名空间中定义的元素。

例如,如果要在屏幕上输出数据,并且在末尾加上换行,就要使用标准命名空间std中的cout和endl,在使用cout和endl时,在cout和endl前面加上命名空间和“::”作用域标识符,示例如下:

std::cout<<"C++"<<std::endl;

2.使用using语句引用命名空间元素。

示例如下:

using std cout;
std::cout<<"C++";

需要注意的是,这种方式只能使用using引入的元素,例如,无法单独使用endl这个元素,但可以通过std::endl的形式使用endl。

3.使用using语句直接引用命名空间

示例如下:

using namespace std;

 这样引入std空间后,std中定义的所有元素就都可以被使用了。但是,针对上面我们提出的那个问题,当标准库中有swap()函数,也有自定义的swap函数呢,针对这个问题,我们可以使用“命名空间::元素”方式指定具体要引用的元素。

使用count进行C++输出

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

<<符号表示该语句将把这个字符串发送给cout;该符号指出了信息流动的路径。

 cout是什么呢?它是一个预定义的对象,知道如何显示字符串、数字和单个字符等。

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

对于:

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

与其说程序显示了一条消息,不如说它是将一个字符串流入到了输出流中。

控制符 endl

cout <<endl;

endl是一个特殊的C++符号,表示一个重要的概念:重启一行。在输出流中插入endl将导致屏幕光标移到下一行开头。

 诸如endl等对于count来说有特殊含义的特殊符号被称为控制符。和cout一样,endl也是在头文件iostream中定义的,且位于名称空间std中。

换行符

cout <<"What's next?\n";

\n被视为一个字符,名为换行符。

 在显示字符串时,在字符串中包含换行符,而不是在末尾加上endl,可以减少输入量。

例如:

cout <<"Pluto is a dwarf planet.\n";
cout <<"Pluto is a dwarf planet."<<endl;

 如果要生成一个空行,则两种方法的输入量相同。

cout<<"\n";
cout<<endl;

 在显示字符串时,通常使用换行字符"\n",其他情况下,则使用控制符endl。

 两者的区别是,endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用“\n”不能提供这样的保证,这意味着在有些系统中,有时可能在输入信息之后才会出现显示。

C++源代码的格式化

源代码中的标记和空白

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


C++源代码风格

  • 每条语句占一行。
  • 每个函数都有一个开始花括号和结束花括号,这两个花括号各占一行。
  • 函数中的语句相对于花括号进行缩进。
  • 与函数名称相关的圆括号周围没有空白。
相关文章
|
17天前
|
机器学习/深度学习 C++
C/C++基础知识——数组、循环
C/C++基础知识——数组、循环
30 0
C/C++基础知识——数组、循环
|
4月前
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
47 1
|
1月前
|
C++
来自C++ Primer 5的函数指针的定义,调用等
来自C++ Primer 5的函数指针的定义,调用等
10 0
|
3月前
|
编译器 Linux C语言
C++Primer 【学习笔记】第一章 深思
main 函数在很多方面都比较特别,其中最重要的是每个 0+程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显式调用的函数。
28 0
|
4月前
|
存储 编译器 程序员
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
33 0
|
4月前
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
30 1
|
4月前
|
存储 Java 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(一)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(一)
20 0
|
1天前
|
C++
C++类和对象
C++类和对象
6 0
|
3天前
|
C++
C++:类的补充知识
C++:类的补充知识
8 0
|
3天前
|
编译器 C++
C++:类的默认成员函数
C++:类的默认成员函数
11 0

相关产品

  • 云迁移中心