文档章节

C到C++ 快速过度 A C++基本框架

傅芃芃
 傅芃芃
发布于 2015/01/19 05:59
字数 1144
阅读 546
收藏 11

单从语法上讲,C++继承了C中几乎所有的关键字,因此在C++中使用C语言完全没有问题。

需要注意的是,printf() 和 scanf() 是库函数,他们并不是C语言的一部分。比如,你不包含头文件stdio.h的时候便无法使用他们,但int,while,for等关键字仍然可以使用。

在C++中使用C语言的库函数时,在包含头文件的部分,需要作一些变更:
我们使用 #include <cstdio>,而不是 #include <stdio.h>。这对于C中的其他头文件也一样,比如 <ctype.h> , <string.h> 在C++中都要用 <cctype> 和 <cstring> 代替。

学习语言时我们最先接触的总是程序框架,之后学习的内容只需在此之上进行添加和修改:


#include <iostream>

using namespace std;

int main()

{

    return 0;

}

这是C++的基本框架,它和C的:

#include <stdio.h>

int main()

{
    return 0;

}

稍有不同。

我们各自包含了他们的一个基本库函数的头文件,它们各自含有C++和C中的输入输出函数。

对C而言,我们用下面的程序进行输入输出:

#include <stdio.h>

int main()

{

    int n;

    if(scanf("%d", &n))

        printf("I entered a number %d to n.\n", n);   

    return 0;

}


我在这里很矫情地使用了if语句,提醒大家scanf()是有返回值的,它返回正确读入变量的个数。

而在C++中,我们这么干:

#include <iostream>

using namespace std;

int main()

{

    int n;

    if(cin >> n)

        cout << "I entered a number " << n << " to n.\n";

    return 0;

}


不难猜出cin和cout的作用,它们和scanf()还有printf()的作用是类似的。而且十分方便,我们终于不用记忆那些繁琐的格式说明符了,C++中的cin和cout会自动判别n是一个in型变量。需要注意的是 >>和<< 是C++中的操作符。

另外,if(cin >> n)是有些奇怪的,scanf()有返回值,但cin >> n是个什么东西?它有值么?事实上cin是一个对象,它和 >> 构成了操作符重载,重载函数的返回值是对象本身。头晕么?这涉及到函数重载的内容,在此暂时不作探讨。但我们要知道,这么用cin是合理的:

cin >> n >> m;(m假设已声明。) 可以这么理解(cin >> n) >> m   (cin >> n)就是cin。

这表示依次向n和m中输入,至于m是个什么类型变量,这个cin它会知道的,并会按照这种类型的标准向其输入,就像用了对应了各式说明符一样,这和cout一致。

值得一提的是,C++中多了:

using namespace std;

这行代码。

你会发现using和namespace都是关键字,它们是C++中的,在C中无法使用。

这个语句声明了一个名称空间std,cout和cin是这个空间中的名称,想想看如果没有这行会发生什么?你的IDE会报错,说cout和cin是没有被声明的变量。这和C中包含头文件的用意很相似。

在C中,printf()和scanf()这两个函数可以直接使用,因为它们的定义和声明都已经在别处存放。但是我们要使用#include <stdio.h>,这个文件中包含了它们的声明。
而在C++中,你可以把变量或者类也这么做。比如,你将一个叫做SHIT的变量声明在一个叫做stshit的名称空间中,你只要使用了using namespace stshit; 就可以直接使用这一坨翔而不用声明。
而声明一个名称空间是后面的内容。

事实上根据以上的内容,你在C中能写的程序,在C++中已经可以照搬了,C++提供了全新的输入输出手段。
至于C语言中的函数部分(特别是参数传递中的形参和实参等),变量的作用域等,在C++中依然没有任何变化,但都是重要的内容。


在此给出一个实例程序供大家熟悉C++:
#include <iostream>

using namespace std;

int main()

{

    int n;

    cout << "If you give a num to n,"

         << " I will return you a sum from 1 to n(0 to quit).\n"

         << "n: ";

    while(cin >> n) {

        if(!n) break;

        int sum = 0;

        for(int i = 1; i <= n; i++)

            sum += i;

            cout << "sum: " << sum << endl

         << "Enter n again: (0 to quit) ";

    }

    return 0;

}


© 著作权归作者所有

傅芃芃
粉丝 14
博文 21
码字总数 19341
作品 0
私信 提问
加载中

评论(1)

小lee说it
小lee说it
2019年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。

https://github.com/yttsam/interview_internal_reference
如何学习一门新的语言二——方法与步骤

之前发表过一篇文章,也是谈如何学习一门新的语言《如何学习一门新的语言》,这篇文章主要的关注点是心态。 今天这篇文章主要的关注点是具体的方法和步骤,是我学习C++和python的一些经验,整...

晨曦之光
2012/06/06
168
0
C++ 类库资源

原文:C++ 类库资源 作者:Breaker C/C++ 开发库 | C/C++ Development Library 这里收集一些著名的 C/C++ 开发库、SDK、类库、可复用类与结构代码 等信息,列举它们的介绍、参考和网站链接,...

晨曦之光
2012/05/23
1K
0
计算机的革命----编译器体系的战争-----集团军的危险信号

Symantec C/C++ 已经不见踪影,Symantec现在专心做他的安全软件,诺顿杀毒软件,还有一些其他的,Boland C/C++最后还是被收购了,现在的RAD C++ Builder混的一直不愠不火,WATCOM 被Sybase败...

Force武装卫队
2012/11/23
1K
9
微软 C++ 编译器 20 周年

本月,微软 C++ 编译器进入了第3个十年。 1992 年 2 月,微软发布首个 C++ 编译器 —— Microsoft C/C++ 7.0。而在此之前发布很多 C++ 预处理器编译器,用于将 C++ 代码转成 C 后进行编译。从...

红薯
2012/02/09
4.9K
18
如何成为一名合格的 C/C++ 开发者?

在大多数开发或者准开发人员的认识中,C/C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃。我从学生时代开始接触 C/C++,工作以后先后担任过 C++ ...

张小方
2018/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot 集成MongoDB

一、MongoDB 简介 MongoDB 如今是最流行的 NoSQL 数据库,被广泛应用于各行各业中,很多创业公司数据库选型就直接使用了 MongoDB,但对于大部分公司,使用 MongoDB 的场景是做大规模数据查询...

zw965
13分钟前
9
0
使用 Envoy 和 AdGuard Home 阻挡烦人的广告

> 原文链接:使用 Envoy 和 AdGuard Home 阻挡烦人的广告 通常我们使用网络时,宽带运营商会为我们分配一个 DNS 服务器。这个 DNS 通常是最快的,距离最近的服务器,但会有很多问题,比如: ...

米开朗基杨
46分钟前
13
0
springboot之全局处理异常封装

springboot之全局处理异常封装 简介 在项目中经常出现系统异常的情况,比如NullPointerException等等。如果默认未处理的情况下,springboot会响应默认的错误提示,这样对用户体验不是友好,系...

Purgeyao
57分钟前
22
0
cookie

cookie: n. 饼干;小甜点 为什么会引入Cookie(在客户端保持http状态) 因为http协议是一种无状态协议,web服务器本身不能识别出哪些请求是同一个服务器发送的,浏览器的每一次请求都是独立...

五公里
今天
23
0
PHP常用函数

<?php/** * 获取客户端IP * @return [string] [description] */function getClientIp() { $ip = NULL; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode('......

半缘修道半缘君丶
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部