嗯,已经是第四篇了,这篇起我就要开始细说语法了,不过在那之前再次申明下主旨:"C++我想这样用" 系列文案是为C程序员打造的,不是C++程序员。

我的终极目标是:让那些觊觎面向对象范式,却又重度强迫症的C脑残粉能够在C++环境下(如C++IDE、C++编译器等)不妥协的,用他们的习惯的C风格,写出他们觊觎很久的带有面向对象的代码。这么啰嗦的话我不想次次都提,但是又怕被不明情况的人乱骂一气,于是我想到了一个词来高度概括上述宗旨-----C with Class!

没错,带类的C,这是C++早期的称呼,但是日渐壮大的C++巨人早就抛弃(背离)了这个乳名,所以我不妨拿来用,我很喜欢这个名字,虽然很多C++程序员用它来鄙视同行的代码,但随他们去吧,因为我又不是他们的同行,我是地地道道的C程序员~~,哈哈!!

我案头摆着的是C++入门神书《Essential C++》,由此进入正题:

第一部分:内建类型&控制流程&基本IO

《Essential C++》第一章中提到的算得上常用的几个数据类型:整型int、实型float double、字符型char、布尔型bool、数组array、字符串string、容器向量vector、指针*

对于C脑残粉来说,指针什么的弱爆了,我要是再啰嗦真的会被灭掉,我只说要注意的:

1.关于布尔类型:在这个系列文章里,C++自带的bool是被禁用的!!原因很简单,我们有C99的<stdbool.h>。什么?你的没有??你不愿意用??好吧,那就继续用你的int代替吧,反正你不会用C++的那个就是了,谁让咱们全是强迫症呢。。。。。。。。。贴出<stdbool.h>的正确用法,你可别弄错了,不然还好意思叫脑残粉?

  #include <stdbool.h>
  bool b = false;

  /* 或者写成_Bool b = false; */
  ...
  b = true;
嗯,进一步解释下,其实_Bool类型是早在stdio.h里就有的,但是没有true和false,然后为了和某++兼容在stdbool.h里,把_Bool宏定义成了bool,把true和false宏定义成了1和0

2.关于string和vector:Essential C++的作者是推荐用这两个东西来彻底代替C的字符串和数组的。没错,如果我是C++程序员,我也会这么做!!但是我是地地道道的Cer,所以在本系列中,这两者同样被禁用!!确实他们很高级,很便利,但是你一点点的贪图这些便利,就会使你逐渐迷失,最后真的变成一个不伦不类的C++程序员!我真的不是开玩笑,凡事莫忘初衷。

3.关于字符常量:这个不好发现,在C里面字符常量是int,但是在C++里面,char就是char,所以导致:

Example
          i = sizeof('a');

在C环境下,结果大于1,在C++下结果恒为1。其实如果是比较熟练的C程序员一定知道,由于内存对齐之类的种种原因,sizeof的结果并不总是那么可靠的,我们平时编程要多加小心才是。

说完了类型接着说控制流程,while啊for啊什么的真真是没啥区别的,不然也不要叫C++了!我就不讲怎么用这写弱智的东西了,于是百度半天还真有异常:

4.关于跳转:

Example

goto LABEL;
          {
              int v = 0;
              ...
          LABEL:
              ...
          }

假设LABEL后的代码是不依赖于局部变量v的,那么上述代码在C里面是合法的,但是在C++里,永远不要企图用goto或switch来跳过块区域内的对象初始化。不过我目前的水平,还没弄出过这么高级的写法,貌似在某些库的源码里真的见识过。。

5.关于IO和重定向:最后说说输入输出吧,作为一个C程序员,有stdio.h搞定不了的I/O吗?printf的效率比不上cout么?看吧,就这样,别去想什么cin和cout了!如果想玩IO重定向什么的,先去研究研究shell把!相信我,那些那你目瞪口呆的小东西没有一个是用cin、cout做的!!

第1部分就到这里了。。。。。再见

C++ 我想这样用(四)的更多相关文章

  1. 从零学习Fluter(四):Flutter中ListView组件系列详展

    今天继续研究了一些Flutter,主要时关于ListVIew那一块的东西,有 SingleChildScrollViewListViewGridViewCustomScrollView 感觉Flutt ...

  2. Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  3. Android点击事件(click button)的四种写法

    在学习android开发和测试的时候发现不同的人对于click事件的写法是不一样的,上网查了一下,发现有四种写法,于是想比较一下四种方法的不同 第一种方法:匿名内部类 代码: package com. ...

  4. 【转】Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  5. JAVA大数据数组排序

    对于数据排序大家肯定见过不少,选择排序或者冒泡排序等等,今天我们要做的是快速排序 + 直接插入排序来对大数据(1000万以上)进行排序,下面我们分别来看看这两种排序规则 1, 直接插入排序 (1)基本 ...

  6. 如何做好一个Sprint Demo

    我列出了一些关于如何做好一个Demo(演示)的建议.我想通过以下四个步骤可以做出一个较好的Demo. 第一步:准备Demo故事 以真实用户使用软件的方式进行Demo.关键点不在于演示软件如何工作,而是 ...

  7. oracle 和c3p0 数据库的Time_Wait 过多问题的一个解决方案。

    项目是B/S模式,放在linux服务器上,tomcat和oracle11g在一台服务器上,tomcat读取数据库采用C3P0连接池,一直比较稳定,所以也没有去管.后来把tomcat放在一台win200 ...

  8. Android APP压力测试(二)之Monkey信息自动收集脚本

      Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...

  9. javaIO系统----再看装饰者模式

    javaIO系统拥有各种各样的类,尤其是每次要进行读写操作时,总会一层套一层的new,以前不明白为什么要这样做,不过学习了适配器模式后,对于这种做法立刻了解了:动态扩展IO的功能,使之符合使用者的习惯 ...

  10. 自己瞎捣腾的Win7下Linux安装之路-----理论篇

    接着上回说道,我把双系统做好啦,开心.... 之后我就在想几个问题: 1.在Ubuntu装好后,重启电脑却还是win7,等我用EasyBCD之后,才可选择使用装好的Ubuntu呢? 2.在用EasyB ...

随机推荐

  1. 257. Binary Tree Paths

    题目: Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree ...

  2. C++:默认的构造函数

    注意:如果类中用户没有定义构造函数,系统会自动提供一个函数体为空的默认构造函数. 但是,只要类中定义了一个构造函数(不一定无参构造函数),系统将不再给它提供 默认的构造函数.因为,默认的构造函数被类中 ...

  3. Python之格式化输出讲解

    1.格式化输出整数python print也支持参数格式化,与C言的printf似, strHello = "the length of (%s) is %d" %(Hello W ...

  4. Android开发之MD5加密

    将字符串进行MD5加密,返回加密后的字符串 public static String encode(String password) { try { StringBuffer sb = new Str ...

  5. [Codeforces137A]Postcards and photos(模拟)

    题目链接:http://codeforces.com/contest/137/problem/A 题意:一个人搬东西,每次只能搬相同的东西,最多只能搬相同的东西不超过5个.问最少搬多少次. 模拟就行了 ...

  6. hdu 4864 Task (贪心 技巧)

    题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...

  7. bzoj3632

    裸的最大团,随机化大法好 多次随机出一个选择顺序然后贪心即可 ..,..] of boolean; a:..] of longint; v:..] of boolean; n,m,i,j,x,y,an ...

  8. ASP.NET MVC 学习7、为Model Class的字段添加验证属性(validation attribuate)

    Adding Validation to the Model ,在Model中添加数据验证 参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-star ...

  9. UVa 1153 Keep the Customer Satisfied 【贪心 优先队列】

    题意:给出n个工作,已知每个工作需要的时间last,以及截止时间end,(必须在截止时间之前完成)问最多能够完成多少个工作 首先预处理,将这n件任务按照截止时间从小到大排序 然后用一个cur记录当前做 ...

  10. WDF模型驱动程序开发

    WDF驱动程序开发 1. 引言 设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作.设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设 ...