C++是在C语言基础上开发的一种集面向对象编程(OOP)、通用编程和传统的过程化编程于一体的编程语言。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐述了C++的基本概念和技术。
全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内容。
第一章——预备知识
主要讲了C++的简介,C++简史,包括了C++的可移植性和标准和程序创建的技巧。详细的介绍了面对的对象的编程,其实如果详细的了解这一部分知识的话,可以阅读一下这本书。
第二章——开始学习C++
1.进入C++
1.1.cout
是C++的生成字符输出
cout
是C++标准库中的一个输出流对象,用于将字符或其他数据类型输出到屏幕或其他目标设备。它支持对各种类型的数据进行格式化输出,并提供了一系列控制输出格式和输出精度的方法。
下面是一个使用cout
输出字符串和数字的示例程序:
#include <iostream>
using namespace std;int main() {// 输出字符串cout << "Hello, world!" << endl;// 输出数字int num1 = 123;double num2 = 3.1415926;cout << "num1 = " << num1 << endl; // 输出整数cout << "num2 = " << num2 << endl; // 输出浮点数// 输出控制符cout << "num1 = " << num1 << hex << " (hex)" << endl; // 输出十六进制格式return 0;
}
在这个程序中,我们首先使用cout
输出字符串"Hello, world!"
,并在末尾加上endl
换行符。接着,我们定义了两个变量num1
和num2
,分别为整型和双精度浮点型,并使用cout
输出这两个变量的值。最后,我们使用<<
运算符向cout
中加入控制符hex
,使得num1
以十六进制格式输出。
输出结果如下:
Hello, world!
num1 = 123
num2 = 3.14159
num1 = 7b (hex)
可以看到,使用cout
可以方便地输出不同类型的数据,并且通过控制符可以对输出格式进行自定义。注意
1.2.endl
是C++中的一个控制符,表示换行并刷新输出缓冲区。它实际上是一个被定义在<iostream>
头文件中的特殊对象。
当使用cout
输出数据时,数据通常会被先存储在输出缓冲区中,而不是立即输出到屏幕上。这样做可以提高输出效率。然而,在某些情况下,我们希望立即将缓冲区的内容输出到屏幕上,而不是等待缓冲区满或程序结束。这时就可以使用endl
来完成这个操作。
endl
的作用有两个:
- 在输出流中插入一个换行符
\n
。- 刷新输出流,强制将缓冲区的内容立即输出到目标设备上(例如屏幕)。
使用endl
的效果相当于连续使用\n
和flush
两个操作符。
例如,在前面提到的示例程序中,我们使用cout << "Hello, world!" << endl;
语句输出字符串,并在末尾加上endl
。这样做的效果是输出字符串后立即换行,并将缓冲区的内容刷新到屏幕上,保证输出的即时性。
需要注意的是,由于刷新缓冲区会导致性能损失,因此在输出大量数据时,过多使用endl
可能会减慢程序运行速度。在这种情况下,建议使用\n
换行符来实现换行,而不是每次都刷新缓冲区。
1.3 .cpp 注意.
.cpp
是C++源代码文件的扩展名,通常用于保存C++程序的源代码。C++程序可以由多个.cpp
文件组成,并通过编译链接生成可执行文件。
在一个.cpp
文件中,通常包含了程序的一部分源代码,可以定义变量、函数、类等各种程序元素。例如下面是一个简单的C++程序示例,它定义了一个main()
函数和一个add()
函数:
#include <iostream>
using namespace std;int add(int a, int b) {return a + b;
}int main() {int a = 1, b = 2;cout << "a + b = " << add(a, b) << endl;return 0;
}
这个程序中,我们首先使用#include
预处理指令引入了<iostream>
头文件,以便使用标准输入输出库。接着定义了一个add()
函数,用于计算两个整数的和。最后,在main()
函数中定义了两个整型变量a
和b
,并使用cout
输出它们的和,最后返回0表示程序正常结束。
在编写完成这个程序后,我们可以将其保存为test.cpp
文件,然后使用C++编译器进行编译。编译器会将.cpp
文件编译成机器可执行的二进制文件,最终生成可执行文件。
1.4 using namespace std;
using namespace std;
using namespace std;
是一个C++中的命名空间声明语句,它用于指定当前代码中使用标准命名空间(std)中的所有成员,以便我们可以直接使用这些成员而不需要添加命名空间前缀。
在C++标准库中,标准命名空间 std
包含了很多有用的类、函数和对象,例如输入输出流对象 cout
和 cin
,字符串类 string
,以及很多其他常用的库函数。为了使用这些库函数和对象,我们通常需要在代码中引入 std
命名空间。
例如,如果我们想要使用 cout
对象进行输出,但没有使用 using namespace std;
,那么我们需要写成 std::cout
:
#include <iostream>int main() {std::cout << "Hello, world!" << std::endl;return 0;
}
然而,如果我们在代码的开头加上了 using namespace std;
,那么我们可以直接使用 cout
,而无需添加 std::
前缀:
#include <iostream>
using namespace std;int main() {cout << "Hello, world!" << endl;return 0;
}
需要注意的是,在大型项目中,为了避免命名冲突,通常不推荐在头文件中使用 using namespace std;
,而是在源文件中使用。另外,建议尽量避免在全局范围内使用 using namespace std;
,而是在需要使用的局部作用域中进行声明,以减少潜在的命名冲突问题。
2.C语言的输出输入和C++语言的输入输出
C语言中的输入输出函数主要有 printf
和 scanf
。其中,printf
函数用于输出格式化的文本,而 scanf
函数用于从标准输入读取格式化的数据。例如:
#include <stdio.h>int main() {int a, b;printf("请输入两个整数:");scanf("%d %d", &a, &b);printf("您输入的两个整数分别是:%d 和 %d\n", a, b);return 0;
}
C++语言中的输入输出主要是使用标准库中提供的输入输出流对象,其中 cout
用于输出数据,cin
用于输入数据。例如:
#include <iostream>
using namespace std;int main() {int a, b;cout << "请输入两个整数:";cin >> a >> b;cout << "您输入的两个整数分别是:" << a << " 和 " << b << endl;return 0;
}
与C语言不同,C++中的输入输出流对象可以进行类型检查和类型转换,因此更加灵活方便。此外,C++还提供了很多其他的输入输出方式,例如文件流、字符串流等,使其在处理各种输入输出场景时更加强大和灵活。
当用户输入两个整数 3 和 5 时,C语言的输出结果为:
请输入两个整数:3 5
您输入的两个整数分别是:3 和 5
而C++语言的输出结果为:
请输入两个整数:3 5
您输入的两个整数分别是:3 和 5
两者的输出结果是相同的,都是将用户输入的两个整数打印出来。
3.main函数
C++程序的入口函数为 main
函数,该函数必须包含在程序中。C++程序从 main
函数开始执行,执行完 main
函数后程序结束。
main
函数的一般形式如下:
int main() {// 函数体return 0;
}
其中,int
是函数返回类型,表示该函数返回一个整数类型的值;main
是函数名;()
是参数列表,表示该函数没有参数;{}
中是函数体,表示该函数所要执行的代码;return 0;
表示该函数返回一个值为 0 的整数。
可以看到,main
函数的返回值类型为 int
,这也是C++中的特殊之处。当程序正常退出时,main
函数应该返回 0,表示程序运行成功。如果程序异常终止或出现错误,可以返回其他非零值来指示错误码。
例如,下面是一个简单的 C++ 程序,它输出 "Hello, world!":
#include <iostream>
using namespace std;int main() {cout << "Hello, world!" << endl;return 0;
}
当程序运行成功时,它将输出 "Hello, world!",并返回值为 0。
为什么不能使用其他名称?
在C++中,main
函数是程序的入口函数,在程序启动时首先被调用。根据C++的语法规定,main
函数必须使用特定的名称 main
,否则编译器将无法正确识别和执行程序的入口。
C++编译器在编译过程中会按照一定的规则寻找 main
函数,并将其作为程序的入口点。如果将 main
函数命名为其他名称,编译器就无法找到程序的入口,从而无法正确执行。
此外,C++标准对 main
函数的签名(参数类型和返回类型)也有明确的规定。根据C++标准,main
函数的返回类型必须是 int
,并且不允许有任何参数。如果使用其他名称或者修改返回类型或参数列表,都将违反C++语法规定。
综上所述,为了确保程序的正确性和可移植性,我们必须使用 main
作为入口函数的名称,并且遵循标准的参数类型和返回类型。
未完待续——————