C++ Primer Plus Notes_1

开始学习C++

      对C++程序的基础结构做一概述,并与狼后面将介绍的主题,如函数和类。

进入C++

      介绍一个显示消息的简单C++程序。程序中使用C++工具 cout 生成字符输出。源代码中包含的注释都是以//打头,编译器将忽略它们。C++对大小写敏感,也即是说区分大小写字符。

//displalys a message

#include <iostream>								//a Preprocessor directive
int main()										//function header
{												//start of function body
	using namespace std;						//make definitions visible
	cout << "Come up and C++ me some time.";	//message
	cout << endl;								//start a new line
	cout << "You won't regret it!" << endl;		//more output
	return 0;									//terminate main()
}												//end of functin body

main()函数

基本结构如下

int main()
{
	statements
	return 0;
}

      这几行表明有一个名为main()的函数,并描述了该函数的行为。第一行 int main() 叫函数头,花括号({和})中包括的部分叫函数体

  • 函数头对函数与程序其他部分之间的结构进行了总结;函数体是指出函数应做什么的计算机指令。
  • 在C++中每一条完整的指令都称为语句。所有的语句都以分号结束。
  • 最后一条语句(return statement)叫做返回语句,它结束该函数。
头函数
作为接口,C++句法要求main()函数的定义以函数头int main() 开始。
C++程序必须包含一个名为main() 的函数。在C++程序时,通常从main() 函数开始执行。 存在例外

C++注释

	//C++注释以“//”双斜杠打头
	/*也可以用C语言中的注释块*/

C++预处理器和 iostream 文件

      C++和C一样,也使用一个预处理器,该程序在进行主编译之前对源文件进行处理。不必执行任何特殊的操作来调用该预处理器,它会在编译程序时自动运行。
      程序要使用C++输入或输出工具,需要提供这样两行代码:旨在简化该程序。

#include <iostream>	//使用cin和cout进行输入输出的程序必须包含文件iostream
//该编译指令导致预处理器将iostreamm文件的内容添加到程序中。是一种典型的预处理器操作
using namespace std;

头文件名

      像iostream这样的文件叫做包含文件——由于它们被包含在其它文件中;也叫头文件——由于它们被包含在文件起始处。头文件命名约定

头文件类型约定示例说明
C++旧式风格以.h结尾iostream.hC++程序可以使用
C旧式风格以.h结尾math.hC、C++程序可以使用
C++新式风格没有扩展名iostreamC++程序可以使用,使用namespace std
转换后的C加上前缀c,没有扩展名cmathC++程序可以使用,可以使用不是C的特性,如namespace std

名称空间

使用下面的名称编译指令来使iostream中的定义对程序可用。

	using namespace std;
	//using这个命令使得std名称空间中的所有名称都可用。这是一种偷懒的方法。

      名称空间支持时一项C++特性,旨在让您编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,它还有助于组织程序。潜在问题时,可能使用两个已封装好的产品中的同名函数出错。所以也可以使用以下方法使所需的名称可用。

using std::cout
using std::endl

使用cout进行C++输出

      cout对象有一个简单的结构,如果string使一个字符串,则下面的代码将显示字符串。编译器通过联系上下文来确定运算符的含义。

cout << string
  1. 控制符endl:重启一行输出。cout打印字符串时,cout不会自动移到下一行。
  2. 换行符:endl和C语言符号“\n”都适用。

C++源代码的格式化

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

C++语句

      C++程序时一组函数,而每个函数又是一组语句。

声明语句和变量

int carrots; //声明语句,通常指出存储的数据类型和数据名称

对于声明变量,C++的做法时尽可能在首次使用变量前声明它。

赋值语句

carrots = 25	//C++(和C)有一项不寻常的特性——可以连续使用赋值运算符

cout 的新花样

      cout 可用于数字和字符串。在打印之前,cout必须将整数形式的数字转换为字符串形式。使用printf()不够精密。cout 能够是被和显示所开发的新数据类型,它的智能行为源自C++的面向对象特性。

其他C++语句

使用 cin

	cin >> carrots

      iostream 文件将cin 定义为一个表示这种字符流的对象。输出时,<< 运算符将字符串插入到输出流中;输入时,cin 使用 >> 运算符从输入流中抽取字符。通常,需要在运算符右侧提供一个变量,已接受抽取的消息。与 cout 一样,cin 也是一个智能对象。它可以将通过键盘输入的一系列字符转换为接收信息的变量能够存储的形式。

使用 cout 进行拼接

	cout << "Now you have "	//cout可以按照这样的方式重写拼接版本
		 << " carrots."
		 << endl

      由于C++的自由格式规则将标记间的换行符和空格看作是可相互替换得到。当代码行很长,限制输出的显示风格时,这种技术特别方便。

类简介

      类时用户定义的一种数据类型。类定义描述的是数据格式及其用法,而对象则是工具数据格式规范创建的实体。C++类对应于某些语言中的对象类型,而C++对象对应于对象实例或实例变量。
      类描述了一种数据类型的全部属性,对象是工具这些描述创建的实体。
      类描述指定了可对类对象执行的所有操作。要对特定对象执行这些允许的操作,需要给该对象发送一条消息。C++提供了两种发送消息的方式:一种方式是使用类方法;另一种方式是重新定义运算符。

函数

C++函数分两种:有返回值的和没有返回值的

使用有返回值的函数

      有返回值的函数将生成一个值,而这个值客服给变量或在其他表达式中使用。参数是发送个函数的信息,返回值是从函数中发送回去的值。在使用函数之前,C++编译器必须知道函数的参数类型和返回值类型。
      不要混淆函数原型和函数定义。原型只描述函数接口。描述的是发送函数的信息和返回的信息。而定义中包含了函数的代码,首次使用函数之前提供其原型。通常的做法是把原型放到main() 函数定义的前面。

函数变体

      有些函数需要多项信息,这些函数使用多个参数,参数间用逗号分开。如 pow() 接受两个参数。另外一些函数不接受任何参数,如 rand() 函数。在C++中,函数调用中必须包含括号,即使没有参数。还有一些函数没有返回值,可以在原型中使用关键字 void 来指定返回类型,以指出函数没有返回值。
      在有些语言中,有返回值的函数被称为函数(function);没有返回值的函数被称为过程或子程序(procedure and subroutine)。但C++和C语言都称其为函数。

用户定义的函数

函数定义的统一格式

type functionname(argumentlist);	//函数原型
main()
{
	functionname(argumentlist)	//调用函数
}
type functionname(argumentlist)	//函数定义和代码
	{
		statements
	}

      每个C++程序都必须有一个main() 函数,用户必须对它进行定义。假设需要添加另一个用户定义的函数。和库函数一样,也可以通过函数名来调用用户定义的函数。对于库函数,在使用之前必须提供其原型,通常把原型放到main() 定义之前,将代码放到main() 的后面

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

	return a*b//后面并非一定得跟一个简单的数字。
	//可以通过使用较为复杂的表达式,避免了创建一个新变量,将结果赋给该变量。然后返回数值

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

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

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

总结

      C++程序有一个或多个被成为函数的模块组成。程序从main() 函数(全部小写)开始执行,因此该函数必不可少。函数有函数头和函数体组成。函数头指出函数的返回值(如果有的话)的类型和函数期望通过参数传递给它的信息的类型。函数体有一系列位于花括号({})中的C++语句组成。 
      有多种类型的C++语句,

  • 声明语句:定义函数中使用的变量的名称和类型
  • 赋值语句:使用赋值运算符(=)给变量赋值
  • 消息语句:将消息发送给对象,激发某种行动
  • 函数调用:执行函数。被调用的函数执行完毕后,程序返回到函数调用语句后面的语句
  • 函数原型:声明函数的返回类型、函数接收的参数数量和类型
  • 返回语句:将一个之从被调用的函数那里返回到调用函数中

      类是用户定义的数据类型规范,它详细描述了如何表示信息以及可对数据执行的操作。对象是根据类规范创建的实体,就像简单变量是根据数据类型描述创建的实体一样。
      C++提供了两个用于处理输入和输出的预定义对象(cin和cout),他们是istream和ostream类的实例,这两个类是在iostream文件中定义的。为ostream类定义的插入运算符(<<)使得将数据插入到输出流成为可能;为istream类定义的抽出运算符(>>)能够从输入流中抽取信息。cin和cout都是智能对象,能够根据程序上下文自动将信息从一种形式转换为另一种形式。
      C++可以使用大量的C库函数。要使用库函数应当包含提供该函数原型的头文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值