「C++」C++ Primer Plus 笔记:第二章 开始学习C++
2.1 进入C++
- 注释以//打头
- 想要执行程序后保持窗口打开(有的情况下执行完后窗口会自动关闭)可以在return前加上
cin.get()
2.1.1 main()函数
- 函数结构为:函数返回类型 函数名 (形参列表) 函数体
- C++中main()函数是操作系统和程序之间的连接,即运行C++程序时,系统自动调用main()函数;如果没有main()函数,系统会指出未定义
- 用作库函数的代码可以不需要main()函数,且库函数一般用于生成动态链接库(DLL),被其他C++代码调用
2.1.2 C++注释
// C++风格的注释,不可以跨行
/* C风格的注释,可以跨行 */
2.1.3 C++预处理器和iostream文件
- 编译器对源代码中的
#include <iostream>
预处理后,源代码中的#include <iostream>
被替换成了iostream
中的代码,此时源代码变成了一个包含iostream
内容的复合文件
2.1.4 头文件名
- 头文件约定
#include <iostream.h> //C风格头文件 #include <math.h> //C++旧风格头文件 #include <iostream> //C++新风格头文件 #include <cmath> //C转C++后的头文件
2.1.5 名称空间
- 通过名称空间来避免多个库中重名的定义,尤其是在使用不同产品的库函数时
- std是C++标准库的命名空间
- 如果命名空间放在全局,则在全局调用不需要加上名称空间前缀;如果在函数内申明命名空间,则可使用的范围也仅在函数内部
using std::cout; // 或者在全局直接这样申明,使用cout时就不需要再加std::
using std::endl;
using std::cin;
2.1.6 使用cout进行C++输出
- C++中双引号引起来的字符是字符串
- \n在字符串中表示换行
- \n 与 endl换行的区别是,endl确保程序继续运行,而有的系统中执行\n后需要输入信息才会出现
2.1.7 C++源代码的格式化
- 有些语言是面向行的,这意味着每条语句占一行,比如python;但在C++中,分号才表示一条语句的结尾,这就意味着,
using namespace std
这一语句中的三个词即使使用回车写成三行,也是合法的代码。因此在C++中,只要能使用空格的地方都可以使用回车接着写,尽管在书写方面不易阅读,但它是合法的代码;但一句完整的字符串不能使用空格分割成两行 - 一行代码中不可分割的元素叫做标记(token),空格、制表符、回车统称为空白(white space)
2.2 C++语句
2.2.1 声明语句和变量
- C++在首次使用变量前申明即可
2.2.2 赋值语句
=
被称为赋值运算符- C++(和C)可以连续使用赋值运算符,例如,下面的代码是合法的:
int steinway; int baldwin; int yamaha; yamaha = baldwin = steinway = 88; // 赋值顺序从右向左
2.2.3 cout的新花样
- cout相比C中的printf函数,cout能自动区分需要输出的内容是int型的25还是string型的"25";而在printf中,需要用
%s
,%d
来区分
2.3 其他C++语句
2.3.1 使用cin
- iostream将cout和cin定义为流的对象,输入和输出变量时,变量是作为流进行输入输出
2.3.2 使用cout进行拼接
- 不加endl即可;此外还可以使用连续的
<<
进行多行打字,例如:
cout << "Now you have 14";
cout << "carrots";
cout << endl;
// 等价于
cout << "Now you have 14"<< "carrots"<< endl;
2.3.3 类简介
- C++的核心概念就是面向对象,类是实现面向对象的途径
- 类是一种用户定义的数据类型,类定义描述的是表示了什么信息,可以对这些信息执行什么操作
- 类实例(对象)是调用方法的实体
2.4 函数
2.4.1 使用有返回值的函数
- 被调函数、调用函数的概念
- 在使用函数之前,C++编译器需要明确参数类型和函数返回值类型
- 提供参数类型和返回值类型等信息的方式是使用 函数原型语句,C++程序应当为程序中使用的每个函数提供原型,原型格式如下:
double sqrt(double); // function prototype
原型结尾的分号表示该语句是一个函数原型,函数原型一般写在头文件中;如果去掉分号,那么该语句是一个函数头,而编译器会要求读取该函数头的函数头;函数头一般写在源文件中
- 函数原型只描述函数接口;函数描述函数实现细节
- 使用老式头文件引用
xxx.h
可以同时使用在C和C++中
2.4.2 函数变体
- void使用
int rand(void); // 函数不接收任何参数 int rand(); // 函数隐式地表明不接收任何参数 void rand(); // 函数不返回任何参数
2.4.3 用户定义的函数
- C/C++不允许函数嵌套定义
- main函数的返回值是返回到系统,且main返回0表示程序运行正常,1表示运行发生错误
2.4.4 用户定义的有返回值的函数
- 函数特性包括:函数原型,函数头,函数体,接受参数,返回值
2.4.5 在多函数程序中使用using编译指令
- 当
using namespace std
被放在文件开头处,表示该文件的所有函数都能使用名称空间std中的所有元素 - 当
using namespace std
被放在函数内部,表示只能该函数能够使用名称空间std中的所有元素
该声明作用范围只在该函数;即使该函数内调用了其他函数,而其他函数使用了名称空间中的元素而没有该声明,会报错 - 当
using namespace std
被放在函数内部且放在特定函数前(例如using std::cout
),那么在该函数内部可以直接调用该特定函数而不加名称空间前缀 - 完全不适用using编译指令,直接在调用名称空间函数前加上名称空间前缀
「C++」C++ Primer Plus 笔记:第二章 开始学习C++相关推荐
- C++Primer读书笔记----第二章变量和基本类型
前段时间学习iphone开发,非常力不从心,很多C/C++的类库代码看不明白.大学的时候都学过C/C++,但是基本上忘光了,现在做C#开发,经常写出来一些性能低下的代码,究其原因就是原理掌握不扎实,乱 ...
- 计算机网络(第五版 作者:AndrewS.Tanenbaum David J.Wetherall 清华大学出版社)读书笔记----第二章的学习
计算机网络第二章--物理层读书笔记 1.物理层是网络的技术设置,物理层的材质和带宽决定了最大的传输速率. 2.传输介质的分类:引导性(有线介质)和非引导性(无线介质). (1)有线介质:磁介质.双绞线 ...
- 「C++」C++ Primer Plus 笔记:第三章 处理数据
面向对象编程的本质是设计并扩展自己的数据类型. C++内置的数据类型分为两组:基本类型和复合类型.基本类型包括整数和浮点数:复合类型是在基本类型的基础上构建的数组,字符串,指针和结构. 3.1 简单变 ...
- 「C++」C++ Primer Plus 笔记:第十七章 输入、输出和文件
17.4 文件输入和输出 17.4.1 简单的文件I/O 需要在头文件中#include<fstream> 写入文件 创建一个ofstream对象管理输出流,每个对象建立一个输出缓冲区,分 ...
- 「C++」C++ Primer Plus 笔记:第一章 预备知识
第一章 预备知识 1.1 C++ 简介 1.2 C++ 简史 OOP:面向对象编程 1.2.1 C语言 编译器:将高级语言翻译成特定计算机的内部语言(底层语言),使用同一高级语言的不同平台编译器可以使 ...
- C++ Primer 读书笔记 - 第二章
1. 这章谈到了初始化和赋值其实是不同的,这使我想起了构造函数中的普通构造函数,拷贝构造函数,赋值构造函数,详见博文C++中的构造函数与析构函数 string这个类有default construct ...
- 深入理解 C 指针阅读笔记 -- 第二章
Chapter2.h #ifndef __CHAPTER_2_ #define __CHAPTER_2_/*<深入理解C指针>学习笔记 -- 第二章*//*内存泄露的两种形式1.忘记回收内 ...
- 《Go语言圣经》学习笔记 第二章 程序结构
Go语言圣经学习笔记 第二章 程序结构 目录 命名 声明 变量 赋值 类型 包和文件 作用域 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记,几乎是书上的内 ...
- Web前端开发笔记——第二章 HTML语言 第四节 超链接标签
目录 前言 一.超链接标签 (一)链接其它子网页 (二)链接其它站点 (三)虚拟超链接 二.从当前页面链接到指定位置 三.链接的访问情况 四.在新窗口中打开链接 例题 结语 前言 本节介绍超链接标签即 ...
最新文章
- phpMyAdmin的配置
- Ubuntu中Vim 中文乱码解决方法
- Java监听器的用法(一):内部类监听器
- 科沃斯擦窗机器人擦不干净怎么办_家用自动擦玻璃机器人哪种好呢?玻妞和科沃斯擦窗机器人能干净吗...
- 高斯平稳随机过程仿真
- sqlserver 创建对某个存储过程执行情况的跟踪
- 前端学习(2185):tabberitem和路由结果
- Android 中文API (65) —— BluetoothClass[蓝牙]
- 智能媒体管理(IMM) Python SDK DEMO
- 设计模式系列--Singleton
- 自动绕过锐捷客户端开热点
- jep java_jep-java-3.4-trial java表达式分析器 - 下载 - 搜珍网
- 采集PLC数据转MQTT上报实现对PLC远程调试和远程程序上下载
- android 微信照片,手机微信图片怎么恢复 答案让人难以置信
- 多粒度网络(MGN)的结构设计与技术实现
- 游戏模型制作的注意事项 项目模型规范总结
- ZYNQ7000 学习(二十五)纯PL 实现独立显存VGA驱动并显示画面
- python导入随机库_怎么用python导入随机库?
- 从前慢-项目小型秒杀系统
- <博弈论> HDU1846
热门文章
- Flask框架(SQLAlchemy(python3版本)中添加数据 )
- 电气6机30节点数据介绍(常适用于优化调度)
- 贪心算法讲解(集合覆盖问题,旅行商问题求解)
- 使用pipenv建立虚拟环境解决python打包exe文件过大的问题(附打包带图标,多个py文件打包exe)
- Java 设计模式之模板方法模式
- OpenCASCADE:写IGES
- OpenCASCADE:Modeling Algorithms模块几何工具之插值
- OpenCASCADE:适用于 Android 的 OCCT AndroidQt 示例
- boost::mpl模块BOOST_MPL_ASSERT_MSG相关的测试程序
- boost::planar_canonical_ordering用法的测试程序