由于我是计算机类嵌入式专业的大一学生,之前一直使用的是生万物的C语言,了解了其过程性语言的特性及其基础语法,在大一下学期期末阶段想自学一下C++,其实在开学初就买了一本C++ Primer,但由于各种原因没抽出空看,想借期末和暑假这一大段空余时间充分学习一下C++,这也是我写此电子笔记的初衷。

  C++是由C语言发展而来,C代表的是过程性语言,C++在C语言的基础上添加的类代表的面向对象语言、C++模板支持的泛型编程。C语言与C++区别不多赘述,为什么要用面向对象,那什么又是面向对象呢?虽然结构化编程的理念提高了程序的可读性,但是在编写大型程序时仍然面临着挑战,为了应付这种挑战,OOP(面向对象)提供了一种新方法。与强调过程性编程不同的是,OOP强调的是数据。

  C++中,类是一种规范,它描述了这种新型数据格式,对象是根据这种规范构造的特定的数据结构,类可以描述数据的基本特征,对象则是描述类的具体数据,通常,类规定了可使用哪些数据来表示对象以及可以对数据进行那些操作。

  接下来编写我的第一个CPP程序:

  

 #include<iostream>
int main()
{
using namespace std;
cout << "Hello";
cout << endl;
cout << "world!";
return ;
}

  

  如果程序要使用C++的输入或输出工具,则需要如下这行代码。

  #include<iostream>

  使用了#include编译指令,该编译指令导致预处理器将iostream文件的内容添加到程序中,这是一种典型的预处理器操作:在源代码被编译前,替换或添加文本。和C语言一样,同样是需要调用头文件,C语言中的输入输出头文件是<stdio.h>,C语言的传统是头文件使用扩展名.h,将其作为一种通过名称标示文件类型的简单方式,但在C++中用法变了,对老式C的头文件保留了扩展名h,仍然可以使用,但C++的头文件则没有扩展名。有些C转换为C++的头文件,这些文件被重新命名,去掉了扩展名h,并在文件名称前加上了前缀c,表示来自c语言。例如C++版本的math.h为cmath。

  名称空间

using namespace std;

  如果使用iostream,而不是iostream.h,则应该使用名称空间编译指令来使iostream中的定义对程序可用。

  using编译指令。这章没有细讲,但是我将它这样理解。当你编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,但是有一个潜在的问题,可能使用两个封装好的产品时候,他们都包含一个名为out()的函数。这样使用out()函数时,编译器不知道你使用的是哪个out(),名称空间让厂商能够将其产品封装在一个叫做名称空间的单元中,这样就可以用名称空间的名称来指出你想用哪个厂商的out()函数了。比如a厂可以将其定义放到一个名为aa的名称空间中,b厂将其定义放在一个bb的名称空间中,这样就可以用名称空间来区分不同的out()函数了。

  

aa::out();//使用a厂商的out
bb::out();//使用b厂商的out

  再看这段代码,现在他们都被放置在std的名称空间中(仅头文件没有.h时),意味着在iostream中定义的用于输出的cout变量实际上是std::cout,因此可以省略using。

  然而多数人不喜欢将引入空间名称之前的代码转换成引入空间名称之后的代码。于是using编译指令应运而生,下面的一行代码表明,可以使用std名称空间中定义的名称,而不必使用std::前缀:

  using namespace std;

  这个using编译指令使得std空间名称中的所有名称都可以用,但是在大型项目中有一个潜在的问题,更好的方法是,只让所需的名称可用:

  

using std :: cout;
using std :: cin;
using std :: endl;

  使用cout进行C++输出

  现在来看一下如何显示一条消息,在C语言中可能会使用如下语句:

printf("Hello world!");

  在C++中,我们将使用iostream下的cout函数来进行输出:

 cout << "Hello";

  双引号部分为字符串即要打印输出的部分,<<符号表示该语句将把字符串发送给cout,该符号指出了信息的流动路径。cout是一个预定义的对象,知道如何显示字符串、数字和单个字符等(对象是类的特定实例,类定义了数据的存储和使用方式)。

  现在来看一下C++从概念上如何解释这个过程。从概念上来看,输出是一个流,即从程序流出的一系列字符。cout对象表示这种流,其属性是在iostream文件中定义的。cout的对象属性包括一个插入运算符<<,它可以将其右侧的信息插入到流中。

  控制符endl

  可以简单的理解为和c语言\n效果一样,不过\n为转义序列。endl为控制符。一个差别就是,endl确保程序继续运行前刷新输出,将其立即显示在屏幕上,使用\n则不能提供这样的保证。

  使用cin

  可以理解为c语言中的getchar()。与cout一样cin也是一个智能对象。

  这就是我的第一个CPP程序,详细的了解了C++的头文件,空间名称,cout,endl,cin。最后我使用的IDE是VS2018,强力安利一波。今后我每天都会再此更新我的CPP学习进度。

  

<CPP学习>第一天 第一个CPP程序 hello word的更多相关文章

  1. C语言搬书学习第一记 —— 认识一个简单程序的细节

    #include<stdio.h> /*告诉编译器把stdio.h 中的内容包含在当前程序中,stdio.h是C编译器软件包的标准部分,它提供键盘输入和 屏幕输入的支持studio.h文件 ...

  2. C#.NET学习笔记2---C#.第一个C#程序

    C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com 6.第一个C#程序:   ...

  3. C#语言————第一章 第一个C#程序

    第一章    第一个C#程序 ******************C#程序***************     ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...

  4. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  5. c++学习笔记---04---从另一个小程序接着说

    从另一个小程序接着说 文件I/O 前边我们已经给大家简单介绍和演示过C和C++在终端I/O处理上的异同点. 现在我们接着来研究文件I/O. 编程任务:编写一个文件复制程序,功能实现将一个文件复制到另一 ...

  6. C#第一章 第一个C#程序

    第一个C#程序 namespace 是C#中组织代码的方式,它的作用那个类似java中的包 using 在Java中作用如果导入其他包 应该是用import关键字而在C#中应使用using关键字来引用 ...

  7. Java学习 1.4——第一个Java程序:Hello World!

    这一篇一起来写第一个Java程序,同时也了解一下IDEA的使用: 打开IDEA,新建项目: 选择Java,右边project SDK是选择Java版本,上一篇我们自己安装了JDK1.8,IDEA自带一 ...

  8. OD学习笔记10:一个VB程序的加密和解密思路

    前边,我们的例子中既有VC++开发的程序,也有Delphi开发的程序,今天我们给大家分析一个VB程序的加密和解密思路. Virtual BASIC是由早期DOS时代的BASIC语言发展而来的可视化编程 ...

  9. 【Python】Django学习一:第一个Django程序

    项目开发环境 Python 3.6 Django 1.11.5 Django安装 在开始安装Django之前,Django更新比较频繁,所以要选择合适的版本,这里选择Django1.11.5. pip ...

随机推荐

  1. stark——查看页面编辑删除按钮

    一.数据列表 设计查页面,主要展示两部分内容,表头部分和数据部分, 表头通过遍历list_display和默认要显示的编辑和删除字段. 1.数据构建 (1)service/stark.py,后台数据构 ...

  2. scss-&父选择器标识符

    在使用选择器嵌套的时候有一种情况需要特别注意,先看一段scss代码实例: .text a { color: blue; :hover { color: red } } 也许写此段代码目的是为了将其编译 ...

  3. 超级简单的jQuery纯手写五星评分效果

    超级简单的评分功能,分为四个步骤轻松搞定: 第一步: 引入jquery文件:这里我用百度CDN的jquery: <script src="http://apps.bdimg.com/l ...

  4. freebsd mount linprocfs

    mount用来做什么? to prepare and graft a special device or the remote node(rhost:path) on to the file syst ...

  5. AS打包出现app:transformClassesAndResourcesWithProguardForRelease错误

    今天打包项目的正式签名APK出现以下错误,当时挺着急用的实在没办法就只能用测试apk凑合来对付一下了 Error:Execution failed for task ':app:transformCl ...

  6. 关于String s = new String("xyz");创建了几个字符串对象?的问题

    引用自这位朋友:http://blog.sina.com.cn/s/blog_6a6b14100100zn6r.html 首先让我们了解几个概念: 栈:由JVM分配区域,用于保存线程执行的动作和数据引 ...

  7. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  8. Nginx+Tomcat+Session 高性能群集搭建

    随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,早先的apache服务器.apache有优点也 有不足,apache渐渐不能满足人们的要求,目前ngi ...

  9. 用unoreder_map实现词频统计

    博客写在CSDN了,google了一下移植真的巨麻烦.... 这里贴个网址算了.... https://blog.csdn.net/z1991998920/article/details/796891 ...

  10. auto create statistic script

    --生成用户创建的statistic脚本 select object_name(stout.object_id), stout.name, 'CREATE STATISTICS '+ stout.na ...