声明
            本人自学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++ 源代码:

#include <iostream>
intmain()
{
std::cout<<"Hello world!"<<std::endl;
}

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

编译:

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

执行:

halberd:/home/C++ # ./a.out
Hello world!
linux-emf1:/home/C++ # ./hello
Hello world!
linux-emf1:/home/C++ #

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

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

linux-emf1:/home/C++ # strings a.out
/lib64/ld-linux-x86-64.so.2
libstdc++.so.6
__gmon_start__
_Jv_RegisterClasses
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
_ZNSt8ios_base4InitD1Ev
_ZSt4cout
_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
_ZNSolsEPFRSoS_E
_ZNSt8ios_base4InitC1Ev
libm.so.6
libgcc_s.so.1
libc.so.6
__cxa_atexit
__libc_start_main
GLIBC_2.2.5
GLIBCXX_3.4
UH-h
UH-h
[]A\A]A^A_
Hello world!
;*3$"

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

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

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

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

这就是整个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. 记录--js中出现的数组排序问题

    这是今天在写vue项目时发生的一个小问题,在此记录一下,方便自己的回顾.项目是前后端分离的,前台主要使用了vue-cli3.0 + mintui,是一个移动端的web app包括了后台发布管理的一些功 ...

  2. pipenv虚拟环境使用方法

    1.打开cmd安装pipenv, pip install pipenv 2.新建工程目录,项目目录,然后cmd进入工程目录 基本命令: pipenv install                  ...

  3. java_day09_GUI事件

    第九章:GUI事件 1.AWT事件模型概述 使用AWT或者Swing中的容器.组件和布局管理器就可以构建出图形界面,但是这时候该界面还并不能和用户进行交换,因为图形界面中的组件还没有添加事件监听器,所 ...

  4. 十五,K8S集群调度原理及调度策略

    目录 k8s调度器Scheduler Scheduler工作原理 请求及Scheduler调度步骤: k8s的调用工作方式 常用预选策略 常用优先函数 节点亲和性调度 节点硬亲和性 节点软亲和性 Po ...

  5. 论文笔记:Learning Region Features for Object Detection

    中心思想 继Relation Network实现可学习的nms之后,MSRA的大佬们觉得目标检测器依然不够fully learnable,这篇文章类似之前的Deformable ROI Pooling ...

  6. mysql数据库: 用户管理、pymysql使用、navicat插件使用

    一.用户管理 二.pymysql增删改查 三.sql注入攻击 一.用户管理 数据安全非常重要 不可能随便分配root账户 应该按照不同开发岗位分配不同的账户和权限 mysql中 将于用户相关的数据放在 ...

  7. pip命令及虚拟环境的建立

    以下命令是pip命令,是帮助我们安装解决python所需要的环境包 列出已经安装的包 pip list 安装要安装的包 pip install 包名 安装特定版本 pip install django ...

  8. manjaro 常用软件安装

    1.搜狗输入法 sudo pacman -S fcitx-sogoupinyin fcitx-configtool fcitx-im yay -Sa fcitx-qt4 sudo vim /etc/e ...

  9. 查看电脑物理地址(MAC)方法

    首先打开电脑,按ctrl+R键,将会出现以下界面 然后直接点击确认即可,会出现管理员界面,如下 我们现在有两种查看MAC地址的方法: 方法一:.直接输入ipconfig/all(或者输入ipconfi ...

  10. 51Nod 1534 棋盘阻挡博弈

    很简单的可以知道 如果P在V的右上角 必输 如果P在V的左下角 必赢 接下里还剩下左上角和右下角两种情况 两种情况其实相同 P是挡不住V通过对角线方向向下/左的移动的 即两者不会相互影响 所以我们只要 ...