送给C++新手的建议之谈

C++和C的不同点
1.C++比C多了一种注释方式:双斜杠注释一次可注释一行.
        例:
        int i;
        i=0;
        // 这一行是注释,下一行将i加一.
        i++;
2.在C++中,变量可以随时处定义,而在C中必须在程序和函数的开始处定义.
        例:
        /*这里是C的例子*/
        int i;
        for(i=0;i<10;i++);
        //如果是C++可以将i在用时再定义.
        for(int i=0;i<10;i++);
3.在C中声明一个struct结构,那么在用的时候要加上struct关键字,在C++中不需要.
*同样的,enum结构和union结构中也是如此.
        例:
        /*在C语言里*/
        struct st
        {int x,y;};
        /*用时:*/
        struct st myst;
        //在C++中可以这样
        struct st
        {int x,y;};
        //用时:
        st myst;
4.在C++中使用了新的IO库:iostream.h在C中只有stdio.h.
        例:
        #include <iostream>
        //IO操作例如:
        cout<<"Hello!!"<<endl;
5.在C++中函数可以被重载,C中不支持函数重载.在C++中函数参数可以省略和设置默认值.
        C和C++中对空参数和没有限制的参数的声明
        -----------------------------
        意义 |C |C++
        -----------------------------
        空参数 |f(void)|f()或f(void)
        -----------------------------
        无限制 |f() |f(...)
        -----------------------------
        例:C++的参数占位
        int func(CDC *);
        //一个技术特性:引用参数和值参数不能被编译器区分并同时重载
        //一个技术特性:重载时为了对传统链接器的支持而采用了函数名字编码,如果不想被编码:
        extern "C" int func(int i);//这个函数不会引被编码.
6.在C++中const不仅仅用来作为声明常量的关键字还可以修饰不能被改变的传入参数.
        例:
        int func(int i);
        //如果函数不需要改变i的值,那么函数可以用int func(const &i);来代替以提高运行速度.
7.void *指针中C中应用时不需要强类型转换而在C++中需要.
        例:
        void *p;
        int a;
        p=(void *)new int;
        a=*p;/*可C中可以这样.*/
        a=(int)*p;//在C++中必须这样.
8.在C++中空指针赋以0值表示空.在C中用(void *)0表示空.在C++里(void *)0不能赋值给任意指针,而可以将0赋值给任意指针.
        例:
        /*C*/
        #define NULL (void *)0
        int *ptr=NULL;
        //C++
        int *ptr=0;
        //一个技术特性:空指针在C++中要赋0值,而0一般会被编译器认作整数.如果有这样两个重载的函数
        //void func(int a)和void func(int *a)并且我想调用第二个函数,而这个参数需要是空值(也就是0)
        //那么实际上程序将会调用第一个函数.因为0优先被看作整数,而不是空指针,所以这种重载要避免.
9.在C++中,char和int就不像C里那样可以不分你我了.
        void print(char c);
        void print(int c);
        将是合法的两个不同的重载函数.
10.在C中enum变量可以被赋以整形值而不必进行强类型转换.在C++不行.
        例:
        eunm name(kexin,admin,root);
        /*在C中可以这么做*/
        eunm name n=2;
        //在C++中只能这样做:
        name n=(name)2;
        //在C++中可以这样:
        int i=kexin;//前面有集合定义.
        char a[admin]//不推荐.
11.在C++中全局变量可以动态初始化,在C中只有常量表达式才可以初始化全局变量,在C++中不是.
        例:
        int g_nnum=6;
        int g_ncont=cont();//这个用法只能在C++中.
        全局变量的初始化通常在main()之前运行
        动态全局变量初始化,可能会造成一些问题.在不同的转换单元里的全局变量初始化顺序不确定.
        控制这种初始化顺序需要很高的技巧.
        转换单元是C++编译器的基础.它是预处理完成之后的一个源文件.extern的全局变量可以在许多不同的转换单元中声明
        ,但是defined的全局变量只能在一个转换单元中声明.
12.C++中新加入的关键字:
        asm     class   delete  new             private         public  throw          try
        catch   friend  inline  operator        protected       this    template       virtual
        ------------------------------------------------------------------------------------------
        bool            explicit        namespace               true    using
        const_cast      false           reinterpret_cast        typeid  wchar_t
        dynamic_cast    mutable         static_cast             typename

发表评论

您必须 登录 才能发表留言!