【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++源代码风格

  • 每条语句占一行。
  • 每个函数都有一个开始花括号和结束花括号,这两个花括号各占一行。
  • 函数中的语句相对于花括号进行缩进。
  • 与函数名称相关的圆括号周围没有空白。
相关文章
|
5月前
|
编译器 数据安全/隐私保护 C++
c++primer plus 6 读书笔记 第十三章 类继承
c++primer plus 6 读书笔记 第十三章 类继承
|
4月前
|
C语言 C++ 开发者
C++基础知识(一:命名空间的各种使用方法)
C++在C的基础上引入了更多的元素,例如类,类的私密性要比C中的结构体更加优秀,引用,重载,命名空间,以及STL库,模板编程和更多的函数,在面向对象的编程上更加高效。C语言的优势则是更加底层,编译速度会更快,在编写内核时大多数都是C语言去写。 在C++中,命名空间(Namespace)是一种组织代码的方式,主要用于解决全局变量、函数或类的命名冲突问题。命名空间提供了一种封装机制,允许开发者将相关的类、函数、变量等放在一个逻辑上封闭的区域中,这样相同的名字在不同的命名空间中可以共存,而不会相互干扰。
|
5月前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
|
4月前
|
C++
C++基础知识(二:引用和new delete)
引用是C++中的一种复合类型,它是某个已存在变量的别名,也就是说引用不是独立的实体,它只是为已存在的变量取了一个新名字。一旦引用被初始化为某个变量,就不能改变引用到另一个变量。引用的主要用途包括函数参数传递、操作符重载等,它可以避免复制大对象的开销,并且使得代码更加直观易读。
|
4月前
|
算法 编译器 C++
C++基础知识(三:哑元和内联函数和函数重载)
在C++编程中,"哑元"这个术语虽然不常用,但可以理解为在函数定义或调用中使用的没有实际功能、仅作为占位符的参数。这种做法多见于模板编程或者为了匹配函数签名等场景。例如,在实现某些通用算法时,可能需要一个特定数量的参数来满足编译器要求,即使在特定情况下某些参数并不参与计算,这些参数就可以被视为哑元。
|
4月前
|
C++
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。
|
4月前
|
自然语言处理 程序员 C++
C++基础知识(五:运算符重载)
运算符重载是C++中的一项强大特性,它允许程序员为自定义类型(如类或结构体)重新定义标准运算符的行为,使得这些运算符能够适用于自定义类型的操作。这样做可以增强代码的可读性和表达力,使得代码更接近自然语言,同时保持了面向对象编程的封装性。
|
4月前
|
存储 编译器 C++
C++基础知识(六:继承)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
4月前
|
存储 编译器 C++
C++基础知识(七:多态)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
4月前
|
存储 算法 程序员
C++基础知识(八:STL标准库(Vectors和list))
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发,同时我们应该也需要知道他们的底层实现,这样在出现错误的时候我们才知道一些原因,才可以更好的去解决问题。