声明
            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方。 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予批评与指正!不胜感激!
           学习的过程分为初识、入门、进阶三个阶段。
            因为对C++没有什么了解,自己的学习设定可能也有失准确性。望兄弟们多指点。谢谢!


我不是一个计算机专业毕业的学生。可是毕业后各种机缘巧合,我走上了IT这条路。工作中,越来越多的发现自己知识的不足。于是很早以前就给自己定了计划, 要学习C++。要会开发 。不会开发的DBA,不是一个好的DBA哈哈,我一直坚信这句话。其实吧, 一开始的时候,我说的开发指的是Oracle 开发 ,至于这里嘛,直接拿来套用下,哈哈。来,哥们儿姐们儿们,有想学C++开发 的,来跟哥一起开始这条不归路吧。哈哈。。。。。以前都觉得自己还小,现在一说话就是哥~,哎真的老了啊。。。

在开始以前呢,先说入门C++要看哪本书吧。首先要推选的必然是“The C++ programming language”,这是C++之父B.S 的作品,绝对的权威,所谓知子莫若父嘛。哈哈。第二本,经过时间的淘沙,经过广大人民群众雪亮的眼睛的挑剔,最终留下这么一本:“C++ Primer”,绝对的经典,入门的好书。我目前的学习,就是通过看这本书结合视频来学习C++的,当然我不是名人,也没什么权威。从哪本书开始学,完全 看自己的,如果你觉得有其他更好的,也欢迎来跟我交流下,让我也一暏为快哈。
              
那么开始吧!

首先,初识C++时,直接来一些理论么?什么叫函数?什么叫命名空间?什么叫指针? 我不这样想,我觉得实例+理论结合起来理解,最容易接受。如果一上来就直抒胸臆,侃侃而谈这些理论,估计我写不完就睡死过去了~

来吧,我们直接开始 了。

一、 最简单的C++程序

来揭开C++神秘的面纱,先来一个最简单的C++程序,也是学任何一门开发语言,开门见山要写的一个东西:Hello world!

先来看看C++ 源代码:

  1. #include <iostream>
  2. intmain()
  3. {
  4. std::cout<<"Hello world!"<<std::endl;
  5. }

再来看看我这个代码编译完成后,执行会有什么。可是怎么编译呢?
我们要知道C++源代码,是人使用的代码,并不是机器可以直接使用的代码。你问我机器直接使用的代码是啥 ? 哦,好好回想下,发现那是好遥远的东西啊。。。是“1 0 ”这两个数字。。。嘿嘿,也就是二进制了。这里不讨论二进制这么复杂的东东哈
那么我们如何把我们人使用的代码转化成机器可以识别的代码呢?G++闪亮登场~哈哈。
g++是C++的编译工具。如果你学习C语言,那么你肯定很熟悉GCC,他们 都是编译器,可以将人能读懂的代码转换成机器能读懂的代码。用法也是一样的。
最常用的使用方法 就是g++ '源代码文件' -o '输出文件'
如果上面只使用g++ '源代码文件' 也是没问题的,会生成一个默认文件:a.out

编译:

  1. halberd:/home/C++ # g++ ./hello.cpp
  2. linux-emf1:/home/C++ # g++ ./hello.cpp -o hello
  3. halberd:/home/C++ # ls -la
  4. -rw-r--r-- root root Jun : C++ Primer.4th.chm
  5. -rw-r--r-- root root Jun : test.cpp
  6. -rw-r--r-- root root Jun : C++学习笔记
  7. -rw-r--r-- root root Jun : hello.cpp
  8. -rwxr-xr-x root root Jun : a.out
  9. -rwxr-xr-x root root Jun : hello
  • 这里要注意啊,C++的编译器是G++,而C的编译器是GCC,别弄错了,不然你会发现,明明代码写对了,但是编译就是报错

执行:

  1. halberd:/home/C++ # ./a.out
  2. Hello world!
  3. linux-emf1:/home/C++ # ./hello
  4. Hello world!
  5. linux-emf1:/home/C++ #

正常执行了, 哈哈。说明这个最简单的C++源代码,还是正确的。太神奇了~

嘿嘿,我突发奇想,想看看a.out 里面到底是啥东西,为啥要经过g++编译就会生成这样一个文件呢?

  1. linux-emf1:/home/C++ # strings a.out
  2. /lib64/ld-linux-x86-64.so.2
  3. libstdc++.so.6
  4. __gmon_start__
  5. _Jv_RegisterClasses
  6. _ITM_deregisterTMCloneTable
  7. _ITM_registerTMCloneTable
  8. _ZNSt8ios_base4InitD1Ev
  9. _ZSt4cout
  10. _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
  11. _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
  12. _ZNSolsEPFRSoS_E
  13. _ZNSt8ios_base4InitC1Ev
  14. libm.so.6
  15. libgcc_s.so.1
  16. libc.so.6
  17. __cxa_atexit
  18. __libc_start_main
  19. GLIBC_2.2.5
  20. GLIBCXX_3.4
  21. UH-h
  22. UH-h
  23. []A\A]A^A_
  24. Hello world!
  25. ;*3$"

XX,除了“Hello world!” 其他全不认识。。。。我瞬间放弃了。。。。。。

二、 C++程序的最基本组成结构

其实学过开发的人都知道,"hello wold" 程序要正常运行,首先源代码中必然包含一种语言代码正常运行的必要组件,或者说结构是完整的。而“Hello world”在所有语言中关键点都只是调用了该语言的输出函数
那么C++程序的源代码正常运行,必需有哪些结构组成呢?

  1. #include <iostream> /*这一行,是在调用C++的头文件,include 也就是包含的意思,也就是说,C++程序的运行必需包含至少一个头文件才可以正常运行。至于什么是头文件,头文件的作用等等,你别想太多,我脑子慢跟不上 你,一会儿咱 再学习。*/
  2. intmain() /*这一行 有个int ,这个是干嘛的?先在这里简单说一下,int 是C++的一个内置数据类型--整型,小心啊,不是整形~咱不学棒子~ int后面跟一个main(),如果你学过一种编程语言,哪怕 只是个shell ,看到 main后面的小()还有下面的{},应该意识到,这 是一个函数了吧?,嘿嘿。关于main函数,是C++运行必要的一个组成部分,每个 C++程序中必然包含main函数。*/
  3. { //函数体开始
  4. std::cout<<"Hello world!"<<std::endl; /*这一行是hello world 的关键所在 ,调用命名空间的cout,将\"Hello world!\"输出到屏蔽。没接触过C++的是不是又迷茫了,啥叫命名空间啊?哈哈我好有成就感,后面的学习过程中会详细介绍。这里只是说下 命名空间就像 一个工具箱,工具箱里有你干活所需要的工具。cout 就是一个工具,一个输出工具。*/
  5. } //函数体结束
 

这就是整个hello world 源代码的内容了。
那么通过上面的说明,你找到了几个C++源代码正常编译所必须的结构呢?
我找到了2个,一个是Include 部分引用了头文件,另一个是main函数。

三、思考
对于C++源代码的构成你了解了没?哈哈是不是觉得很简单,简单的5行代码,两个部分就写出一个C++程序。

嘿嘿,我要黑心的打击你一下了,别高兴太早,你真正了解了么?我们来一起思考几个问题啊:
1. #inlude 的作用是什么呢?'<>' 这两个符号是干嘛呢?有没有其他符号可以替代呢?如果有,不同符号代表的意义有什么区别呢?被'<>'引用起来的内容又是个什么东西呢?我们对它又了解多少呢?
2. int 是C++语言中的一个内置函数--整型。那C++内置函数有多少种呢?常用的有哪些呢?不同的内置函数又有什么用途呢?
3. std 是什么?有什么作用呢?'::' 这两个冒号连在一起是啥意思呢?cout又有什么作用呢?'<<' 这两个小于号又代表什么意思呢?
本来还想问几个问题呢,我自己都怕了, 因为真的啥都不知道。。。555555.。。。
不过没关系,过不了几天我就会都知道了,过几天你也来回答我吧。嘿嘿
没事的时候自己写点东西,熟悉下,开发语言,必须要每天写东西,不然就都忘记了。。。。

咱别写hello world了,咱定情个I LOVE YOU 吧,哈哈。以后,学会了编写windows程序,可以把表白的话写成一个小程序,然后发给自己中意的女孩儿。。。。是不是很屌丝啊。。。哈哈

 四、回顾
我们通过今天的学习呢,都学到了哪些东西呢?
1. C++最简单源代码的组成部分
2. 如何编译C++源代码文件为操作系统可执行文件(g++)

C++学习 之 初识C++的更多相关文章

  1. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  2. DotNetty网络通信框架学习之初识Netty

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  3. 学习笔记:java并发编程学习之初识Concurrent

    一.初识Concurrent 第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验 ...

  4. C++学习 之 初识头文件

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...

  5. C++学习 之 初识命名空间

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...

  6. C++学习 之 初识变量和基本类型 之 内置类型

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...

  7. TensorFlow学习(1)-初识

    初识TensorFlow 一.术语潜知 深度学习:深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法. 深度学 ...

  8. Java学习-002-Java初识

    此文主要讲述什么是 Java,以及 Java 常识性知识,方便亲们进一步了解 Java 语言相关的常识. 一.Java 概述 Java 语言是美国 Sun Microsystems 公司于 1995 ...

  9. Backbone.js学习之初识hello-world

    说了好久好久要学习Backbone.js,现在终于下定决心开始学习了.然后呢,就根据我的学习进度在这里做个简单的记录,方便新人,也方便我自己以后回忆. 准备 用bower下载这几个库或框架也是醉了.. ...

随机推荐

  1. angular流程引擎集成

    工作流在oa和erp中十分常见,现有成熟的工作流通常是在客户端实现的,web实现工作流的案例十分稀少.要实现web工作流必须要有强大的流程设计器,这里为大家介绍一款基于angular的流程控件,其功能 ...

  2. Mysql设置主库binlog文件自动清理

    mysql主库中设置了打开binlog模式后,会在datadir目录下生成大量的日志文件,mysql默认是不会自动清理的,我们来设置下mysql自动清理binlog文件 一.打开mysql [root ...

  3. Android异常与性能优化相关面试问题-内存管理面试问题详解

    内存管理机制概述: 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存. 回收机制:在系统内存不足的时候,系统有一 ...

  4. BZOJ 1016 生成树计数

    现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的).由于不同的最小生成树 ...

  5. hdf5文件、tqdm模块、nunique、read_csv、sort_values、astype、fillna

    pandas.DataFrame.to_hdf(self, path_or_buf, key, **kwargs): Hierarchical Data Format (HDF) ,to add an ...

  6. Java通过腾讯邮箱发送邮件

    private static void sendEmaill() { Properties prop = new Properties(); //协议 prop.setProperty("m ...

  7. 第六章 组件 60 组件切换-应用切换动画和mode方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  8. 谷歌插件学习笔记:把iframe干掉……

    好久不写博客了,感觉自己变得越来越懒了,是没有时间吗?不是,是自己变得越来越懒了,好多东西不愿意去总结了,可能也是学的不精总结不出来什么玩意儿.不过,一切都是借口.还是坚持学习,坚持写博客吧,虽然写的 ...

  9. hive2.3.4安装

    一.安装Hadoop Hive运行在Hadoop环境之上,因此需要hadoop环境,本次在安装在hadoop完全分布式模式的namennode节点上 请参考:hadoop搭建 二.安装Hive 下载 ...

  10. composer (一)

    composer参考文档: composer中文网 安装composer:  Windows安装:使用安装程序:https://docs.phpcomposer.com/00-intro.html#U ...