note of C++ primer plus

面向过程、面向对象、模板的泛型编程

源代码 编译 目标代码 (+启动代码、库代码)链接 可执行代码

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()函数

例外:

  1. 在Windows编程中,可以编写一个动态链接库(DLL)模块,用于其他Windows程序调用

    由于DLL模块不是独立的层序,因此无需main()

  2. 用于专用环境的程序,如机器人中的控制器芯片

    这些编程环境提供一个框架程序,该程序调用一些非标准函数,如_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一样,都为智能对象,并会将输入信息自动转为右侧变量能够接受的形式

  1. 类方法调用
  2. 运算符重载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值