面向过程、面向对象、模板的泛型编程
源代码 编译 目标代码 (+启动代码、库代码)链接 可执行代码
xxx.cpp
g++ xxx.cpp
a.out
启动代码:main()函数被启动代码调用,而启动代码由编译器添加到程序中,是程序和OS间的桥梁
OS调用启动代码,启动代码调用main()
返回值由main()经启动代码返回给OS,作为运行结果状态标识(一般0成功,非零值失败)
四种main()风格,推荐前两种
int main() {... return 0;}
int main(void) {... return 0;}
main() {...} // original C style, has been descrapted
void main() {...}
除main()函数外,其他函数必须显式的写明返回语句(main()函数有隐式的return 0;
)
C++程序必须包含一个main()函数,否则编译器将指出未定义main()函数
例外:
-
在Windows编程中,可以编写一个动态链接库(DLL)模块,用于其他Windows程序调用
由于DLL模块不是独立的层序,因此无需
main()
-
用于专用环境的程序,如机器人中的控制器芯片
这些编程环境提供一个框架程序,该程序调用一些非标准函数,如
_tmain()
单片机、嵌入式的 程序,单片机无OS,程序的入口完全依靠指定的地址
#include <iostream> // 编译指令,将使预处理器(预编译器)把iostream的内容添加到程序中,替换到该行文本处,伙同源程序被编译
源文件不被修改,将源代码文件与
iostream
组合成一个复合文件,交给下阶段的编译
iostream
也是头文件,但一些C头文件被转换为C++头文件是,文件被重新命名、去掉了扩展名h(C++风格,如果该文件来自c的某库,可在名称加上前缀c)如在C++中使用C的math.h
为#include <cmath>
对于纯粹的C++头文件,去掉h不仅是形式变化,没有h的头文件也可以包含命名空间
using namespace std;
using
编译指令
namespace
命名空间,是C++特性,旨在编写大型程序或将多个厂商现有代码组合起来时更加容易,有助于组织程序如两个厂商封装的代码,都有
wanda()
函数, 在使用时编译器将不知道指定的哪个版本。命名空间让厂商能够将其产品封装在一个叫做namespace
的单元中,便可用命名空间知名想用的是哪个类库的函数如
Microflop::wanda()
和Piscine::wanda()
三种版本
#include <iostream>
int main(void)
{
std::cout << "Hello World!" << std::endl;
return 0;
}
#include <iostream>
int main(void)
{
using namespace std; // all name available, 使std命名空间中的所有名称都可用,在大型项目中有潜在问题
` cout << "Hello World!" << endl;
return 0;
}
#include <iostream>
int main(void)
{
using namespace std::cout; // make cout available
using namespace std::endl;
` cout << "Hello World!" << endl;
return 0;
}
std::cout << "Hello World!" << std::endl;
<<
指明了信息流动的路径,将把字符串发送给输出设备cout
,当前输出设备为终端显示窗口;它是按位左移运算符的重载(对于重载,编译器会通过上下文来确定运算符的具体含义)
cout
是一个预定义的对象,知道如何显示字符串、数字、单个字符等,ostream
类的对象从概念上看,输出是一个流,即从程序流出的一系列字符。
cout
对象表示这种了,其属性是在iostream
文件中定义;<<
为cout
的一个对象属性-插入运算符,将其右侧的信息插入到流中。即将一个字符串插入到输出流中去
endl
:光标重启一行,为控制符(具有特殊含义的特殊符号)相较于转义字符
'\n'
,endl
确保程序继续运行前刷新输出,将其立即显示在屏幕上。
C的某些编译器,强制要求变量声明定义在函数体的靠前位置;而C++无需
int carrots;
cin >> carrots;
cin
终端输入被cin
输入流捕获,并传给变量carrots
(也是信息的流动),istream
类的对象
>>
从输入流中抽取字符,右侧需要提供一个变量,以接受抽取的信息与
cout
一样,都为智能对象,并会将输入信息自动转为右侧变量能够接受的形式
- 类方法调用
- 运算符重载