C++ primer plus 第二章

开头写了hello world,以及注释,之前的教程有就不说了,可以去看看,我也是一开始看的菜鸟教程,之后全是学习C++ Primer Plus 的笔记,然后后续还要学习OpenSceneGraph…三维渲染引擎。。。。

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

通常文件开头会有

#include <iostream>

这个就是典型的预处理器操作:在源代码被编译之前,替换活添加文本,原因就是io输入输出时的方案设计iostream文件中多个定义,原始文件并没有被修改,是将源代码文件和iostream组合成一个复合文件,编译下一个阶段将使用该文件

注意:cin和cout ,就是输入和输出的程序肯定必须包含文件iostream

2.1.4、头文件名

像iostream,这种文件,叫做包含文件(include file),因为它们被包含在其他文件中,所以也叫头文件(header file),其实头文件就是支持特定的工具,C++仍然可以使用C中,math.h这种扩展名的头文件,在C++中被改为了cmath,为了符合C++文件的命名风格,纯粹的C++的头文件通常不含.h,即iostream这种。我个人理解应该跟python里边import别的文件中的方法类似,使用其他的工具,在开头需要include一下子

3、名称空间

using namespace std;

其实这个是C++的也行,问题就是类似于python中不同文件中大家的方法函数命名都为同一个名字的时候产生了冲突,所以出现了名称空间,如下:

Microflop::wanda("go dancing");

Piscine::wanda("a fish name XXX");

以上就是造成冲突导致编译器无法识别哪个版本,所以cout这种类、函数和变量是C++的标准组件,所以都放在了名称空间std,所以hello world 才出现了后续的省略using指令编码:

std::cout << "hello world!";

std::cout << "good morning" << std::endl;

而 using namespace str;这个表示std中所有的名称都可用这样是偷懒的方法,就类似Python中直接import整个os,大型项目中肯定存在潜在的问题,更好的方法就是,通过使用using声明来实现:

using std::cout;  /*这个就是python中的print()*/

using std::endl;

using std::cin;  /*这个就是python中的input()*/

2.1.6

cout 就是信息流输出,通过<< 来表示将后边双引号中的内容发给cout

cout << string ;

1、控制符

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

2、换行符

这个跟Python一样了 \n就是换行符了

关于endl 和 "\n"的区别

“\n"表示内容为一个回车符的字符串。std::endl是流操作子,输出的作用和输出”\n"类似,但可能略有区别。
std::endl输出一个换行符,并立即刷新缓冲区。
例如,

std::cout << std::endl;
相当于

std::cout << '\n' << std::flush;,/*或者*/
std::cout << '\n'; std::fflush(stdout);

由于流操作符operator<<的重载,对于’\n’和"\n",输出效果相同。
对于有输出缓冲的流(例如cout、clog),如果不手动进行缓冲区刷新操作,将在缓冲区满后自动刷新输出。不过对于cout来说(相对于文件输出流等),缓冲一般体现得并不明显。但是必要情况下使用endl代替’\n’一般是个好习惯。
对于无缓冲的流(例如标准错误输出流cerr),刷新是不必要的,可以直接使用’\n’。
----

由于直接输入/输出和操作系统相关,可能需要切换内核态/用户态,需要一定的时间开销,频繁地进行操作会极大地降低输入/输出的效率,所以标准库对流的输入/输出操作使用缓冲。具体来讲,就是在内存中保存一个大小相对固定的区域(缓冲区)用来储存临时的输入或输出。当必要时,才向系统设备复制缓冲区的内容并清空缓冲区,这个过程称为刷新。
====

2.1.7 C++源代码的格式化

C++中 int main(){}也可以使用回车分开,也不会错误如下:

int

     main

(){    using

       namespace

   std; cout

          << "hello";

    endl; return 0;
}

这种竟然也是合法的代码。。。。。制表符和回车不可以放在名称,字符串中间。

源代码风格:

每条语句占一行

每个函数都有一个开始花括号和一个结束花括号,两个花括号各占一行

函数中的语句都相对于花括号进行锁紧

与函数名称相关的圆括号周围没有空白

总结访问名称空间的四种方法:

1、using namespace std; 放在函数定义前,所有的函数可以使用名称空间std中所有的元素

2、using namespace std;放在特定函数定义中,让该函数能使用名称空间std中所有的元素

3、在特定的函数使用 using std::cout using std::endl 这种

4、还有一种完全不使用,使用前缀 std::,如下:

std::cout << "hello world" << std:endl;

本章总结:

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

由多重类型的C++语句,包括以下6种:

1.声明语句:定义函数中使用的变量名称和类型

2.赋值语句:使用赋值运算符(=)给变量赋值

3.消息语句:将消息发给对象,激发某种行动

4.函数调用:执行函数,被调用的函数执行完毕后,程序返回到函数调用语句后面的语句

5.函数原型:声明函数的返回类型,函数接受的参数数量和类似

6.返回语句:将一个值从被调用的函数哪里返回到调用函数中

类是用户定义的数据类型规范,它详细描述了如何表示信息以及可对数据执行的操作,对象是根据类规范创建的实体,就像简单变量是根据数据类型描述创建的实体一样

C++提供了两个用于处理输入和输出的预定义对象(cin和cout),他们是istream和ostream类的实例,这两个类是在iostream文件中定义的,为ostream类定义的插入运算符(<<)使得将数据插入到输出流成为可能,为istream类定义的抽取运算符(>>)能够从输入流中抽取信息,cin和cout都是只能对象,能够根据程序上下文自动将信息从一种形式转换为另一种形式

C++可以使用大量的C库函数,要使用这鞋库函数,应当包含提供该函数原型的头文件

复习题

1.C++程序的模块叫什么?

它们叫函数

2.下面的预处理器编译指令是做什么用的?

#include  <iostream>
这将导致在最终编译前,使用iostream文件的内容替换该编译指令

3.下面的语句是做什么用的?

using namespace std;
可以是程序使用std名称空间中的定义

4.什么语句可以用来打印短语”hello,world”,然后开始新的一行?

cout  \n   cout   endl

5.什么语句可以用来创建名为cheeses的整数变量?

int cheeses;

6.什么语句可以用来将值32赋给变量chesses?

cheeses = 32;

7.什么语句可以用来将从键盘输入的值读入变量chesses中?

cin >> cheeses;

8.什么语句可以用来打印”we have x varieties of chees,”,其中x为变量cheeses的当前值

cout << "xxx" << cheese << "xxx";

9.下面的函数原型指出了关于函数的那些信息?

int froop(double t);

调用函数froop()时,提供一个参数,参数类型为double,该函数返回一个int值,如下

int gval = froop(3.1415926);

void rattle(int n);

函数rattle()接受一个int参数且没有返回值,例如:

rattle(37);

int prune(void);

函数rune()不接受任何参数且返回一个Int值,例如:

rattle(37);

10.定义函数时,在什么情况下不必使用关键字return?

档函数的返回类型为void是,不用再函数中使用return,然而,如果不提供返回值,则可以使用它

11.假设您编写的main()函数包含如下代码:

cout << “please enter your PIN:”;

而编译器指出cout是一个未知标识符,导致这种问题的原因很可能是什么?指出三种修复问题的方法

using namespace std; main()外

using namespace std; main()内

str::count

编程题
1.写一个C++C程序,显示姓名和地址

#include <iostream>
using namespace std;
int main() {
    cout << "姓名,地址" << endl;
}

2.写一个程序,输入一个以Long为单位的距离,转换为码

#include <iostream>
using namespace std;
int main() {
    int longtest;
    cin >> longtest;
    longtest = longtest * 220;
    cout << longtest << endl;
}

3.写一个程序,使用三个用户定义的函数

#include <iostream>
using namespace std;
void mytest();

int main() {
    cout << "姓名,地址" << endl;
    mytest();
    mytest();
}

void mytest(){
    cout << "test" << endl;
}

猜你喜欢

转载自blog.csdn.net/u013693952/article/details/90711553