C++基础摘要

来源:互联网 发布:windows进程内存监控 编辑:程序博客网 时间:2024/06/11 17:25

几年以后再一次看C++,发觉自己在语言上其实还是个一知半解,经常追求会用就行,不求甚解的门外汉。写这篇的目的一个是为了梳理下脉络,忽略细节,先记一下基础中的基础,另一个是为了响应各大神的号召,看过就要写,不写下来过几天就要忘。

一、数据类型

基本数据类型:

bool:

可赋值一切实数,0为false,其余都为true

char:

0-127的整数,或ascii的字符

wchar_t:

宽的char,可存储汉字,日语等宽字符

int:

默认为signed int,如需要无符号数,需明确写明unsigned int,或简写为unsigned

long:

同上默认为signed long,无符号为unsigned long

float:

由于精度问题,偶尔会由于精度的四舍五入出现些莫名其妙的问题,一般不推荐使用

double:

不推荐float那就剩它了,速度在一些机器上比float更快,说明在效率方面和float比也没有明显劣势 ^_^

标准库类型

§ string: 98版的c++没有把string作为基本数据类型,使用前必须包含头文件,和std命名空间(using namespace std),不知道c++0x有没有修改这部分的内容,和Java,ruby等等比起来,这个用着实在是有些不方便。

      1. 创建方法:

                       string s = "This is a string.";

                       string s1("This is another string");

      2. s.empty()     返回s是否为空串

      3. s.size()         返回s中字符的个数

      4. s[n]              返回s中位置为n的字符,位置从0计数

      5. s + s1           连接成一个新字符串并返回

      6. s == s1         比较内容是否相等

      7. 在各个语言里和string有关的操作方法都相当繁多,先就到这,别的用到了再说

§ vector: 书上说现在已经不推荐直接使用数组和指针了,除了在非常要求速度效率的场合,都建议用这个vector来代替,我半信半疑的想去topcoder上找个神仙的代码查证下,结果发现单位的网不给力,居然登陆不上去。只好先记下来再说。

      1. vector所在的包是,同样在std下

      2. vector是一个容器类模板,用vector产生对象时的形式为:vector ivec; vector svec; vector othvec;

      3. 创建方法:

            vector v1;             v1保存类型为T的对象,构造为一个空的容器

            vector v2(v1);       v2为v1的一个副本,即依照v1创建v2

            vector v3(n,i);       v3包含n个值为i的元素

      4. v1.push_back(t);      在v1中装入t

      5. v1[n]                        v1中第n个元素

  • § bitset: C++标准库提供了一个专门用来处理二进制位的类bitset,需引用包,个人感觉在某些方面比用整型和位操作符的组合要方便些

      1. 创建方法:

             bitset b;                     n为bitset对象的位数,比如16位、32位,每位初始化为0

             bitset b(0xffff);           可以用unsigned long型来初始化bitset对象,超出bitset的高阶位会被丢弃

             bitset b(“111000”);    用字符串来初始化bitset,string的左边为高阶,右边为低阶,字符串与bitset中的位高低阶的顺序相反

             bitset b(s,pos,n);       b用字符串s中从位置pos开始的n位的字串来初始化

      2. b.size();      返回b中二进制位的个数

      3. b.count();    返回b中1的个数

      4. b[pos];        b中在pos处的二进制位

      5. b.set();        所有二进制位都置为1

      6. b.reset();     所有二进制位置0

      7. b.set(pos);   pos处置为1

      8. b.reset(pos); pos处置为0

      9. b.flip();  b.flip(pos);      取反

      10. b.to_ulong();              返回bitset对应的unsigned long值

类类型

§ classstruct:这两个可以看做声明特殊类型,即类类型,和结构类型的特殊数据类型,它们的对象也是一个类型。所以在class和struct的定义块后面才都需要分号。格式如下:

      class class_name{

            public:

                  int function_name(){

                              ………

                  }

            private:

                  int a_int;

      };

      struct的格式就是把上面的class换成struct,最后的分号千万都不能落掉。两者的区别在于,不写private和public标号的时候,struct默认所有的变量和方法都是public的,而class默认认为是private的。

 

二、控制结构

      由于大多数语言控制结构的写法大同小异,这里只简单列举格式,不做详细分析。

      分支

      § if-else:

            if(expression){

                  ……

            }else if(another expression){

                  ……

            }else{

                  ……

            }

      § switch-case:

            switch(expression){

                  case 1:

                              ……

                              break;

                  default:

                              ……

            }

            c++中的switch分支中的expression只能是整型,如int,bool或char型。

      循环

      § while:

            while(expression){

                  ……

            }

            或:

            do{

                  ……

            }while(expression);      //与while不同,这里需要用分号结束

      § for:

            for(int i=0;i<10;i++){

                  ……

            }

三、函数

      函数的声明和定义,大多语言也都差不多,这里也只简单写下,留待以后再做深究。

      return_type function_name(param_type, param_type parameter);   //声明里里的参数列表可以只写类型,不写变量名

      return_type function_name(param_type parameter1, param_type parameter2){

            ……

            return return_val;      //如果return_type为void,这一句略去

      }

四、小结

     该写和该补充的细节都还有很多,比如外部类型,常量的使用;类的构造方法析构方法,继承与多态;指针函数和函数指针,引用;异常处理与反射机制……

      这一次只是作为一个引子,以后尽量把各部分都完善的填充起来。

原创粉丝点击