C++基础

1、标识符命名规则:

(1)由英文字母、数字和下划线组成;

(2)英文字母的大小要加以区别;

(3)不允许使用数字开头;

(4)不能用C++中的关键字。


2、C++提供了 const 关键字声明常量,const 表示一个“常值变量”,即不能改变值的变量。


3、4294967295是32为CPU寄存器以及Visual C++6.0编译器所允许的最大正整数。


4、整型常量:

(1)十进制整型常量:十进制整型常量由0~9的数字组成。不能以 0 开头,没有小数部分。

(2)八进制整型常量:八进制形式整型常量必须以 0 开头,即以 0 作为八进制数的前缀。

(3)十六进制整型常量:十六进制整型常量的前缀为 0X 或 0x。由0~9的数字和A~F(a~f大小写相同)的字母组成。

实型常量:

(1)小数表示法;

(2)科学记数法:指数部分以符号“e”或“E”开始,但必须是整数,并且符号“e”或“E”两边都必须有至少一位数。例如:1.2e20, -3.4e-2


5、数据类型:

类型                    所占字节数

char                            1

bool                            1

short                           2

int                               4

long                             4

float                            4

double                         8

long doubel                  8


6、易错:

1
2
3
cout<<135/25<<endl;        //输出:5
cout<<135.0/25<<endl;        //输出:5.4
char arr[5] = "Hello";        //错误的代码,数组溢出


7、在计算机中,数据都是以二进制形式表示,以字节为最小单位进行存储。


8、共用体的内存空间可以用来存放多种不同类型的成员,但是在某一瞬时只有一个成员起作用,而起作用的成员是最后一次存放的成员。


9、大写字母的ASCII码是从65开始的,而小写字母的ASCII码是从97开始的,所以只要将原字符的ASCII码加上32就可以获得对应的小写字母了。

(0 - 0;'0' - 48;'A' - 65;'a' - 97)


10、尽量不要在同一段代码中的复合语句内外定义同名的变量,虽然这样是合法的,但是不利于程序的阅读,也容易出现逻辑错误。


11、switch语句中的break语句属于跳转语句,在switch语句中,当遇到break语句时,程序将跳转到switch语句之后的下一行代码处。如果switch语句中没有使用break语句,当表达式与某个常量匹配时,将执行当前case语句代码,并且继续向下执行case语句的代码。直到遇到break语句或者switch语句结束。


12、在程序中使用do  while语句时,不要忘记while 语句部分在末尾要添加分号。


13、break语句跳出本层循环;continue语句跳出本次循环。


14、在程序设计中建议少用、慎用goto 语句,但是并不是禁用goto 语句,在嵌套的循环语句中,goto 语句可以直接跳出所有外层循环。


15、return语句将退出当前函数,返回到调用该函数的地方,开始执行吓一跳语句;

       exit 语句用于终止当前调用的进程,通常用于结束当前的应用程序。


16、在函数调用的时候要注意是传值调用还是传址调用。


17、省略号“…”也是参数,代表函数的参数是不固定的,可以传递一个或多个参数。


18、重载函数是指多个函数具有相同的函数名称,而参数类型或参数个数不同。

(1)函数的返回值类型不作为区分重载函数的标识;

(2)对于普通的函数参数来说const 关键字不作为区分重载函数的标识;

(3)如果参数的类型是指针或引用类型,则const 关键字将作为重载函数的标识;

(4)参数的默认值不作为区分重载函数的标识;

(5)使用typedef 自定义类型不作为重载的标识。


19、在C++中定义类时,类名通常以答谢字母C开头,成员变量以“m_”为前缀,这是一个约定俗成的习惯。


20、定义类的成员变量与定义普通的变量有所不同,那就是不能够在定义时对成员变量进行初始化。


21、析构函数不能够被重载,一个类只能有一个析构函数。


22、当定义一个类对象时,首先从顶层依次调用基类的构造函数,最后调用自身的构造函数;析构函数的调用顺序与构造函数正好相反,首先调用自身的析构函数,然后依次调用基类的析构函数。


23、对于多继承,C++语言提供了虚继承的机制,虚继承使得子类中只存在一个基类。


24、定义宏时,最好对每个数据加上括号,防止造成二义性问题,宏定义只是简单的替换。


25、在C语言中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等3个用处。在C++程序中,它还可以修饰函数的定义体,定义类中某个函数为恆态函数,即不可改变类中的数据成员。


26、内联函数inline是指嵌入代码,就是在调用函数的地方不是跳转,而是直接把代码写到那里去。


27、const常量赋值时,必须同时初始化;声明一个引用,引用不能为空,同时必须初始化。


28、C++的空类默认产生四个函数:默认构造函数、析构函数、拷贝构造函数和赋值函数。


29、面向对象技术的基本概念是:类、对象、继承。


30、struct 与class 的区别在于:struct中变量默认是public, class中变量默认是private。


31、类中的成员变量要初始化必须是在构造函数中或将其设置为static。


32、析构函数可以是内联函数。


33、析构函数可以是virtual 虚函数类型,但构造函数则不能。


34、覆盖(override)的函数必须有一致的参数表和返回值;重载(overload)是指编写一个与已有函数同名但参数表不同的函数。


35、虚继承就是为了节约内存的,他是多重继承中的特有的概念。适用与菱形继承形式。

       虚函数继承就是覆盖。即基类中的虚函数被派生类中的同名函数所覆盖。


36、左移运算符(<<)是双目运算符,其功能是把"<<"运算符左边的运算数的各二进位全部左移若干位,移动的位数由"<<"     运算符右边的数指定,高位丢弃,低位补0。   如:a<<2 //代表a的二进数向左移动2位。实际上左移一位相当于该数乘以2,称动2位 相当于该数乘以4,以此类推。这种情况只限于移动位不含1的情况。 
      右移运算符(>>)是双目运算符,其功能是把">>"运算符左边的运算数的各二进位全部右移若干位,移动的位数按">>"     运算符右边的数指定。在进行右移时对于有符号的数需要注意符号问题,当为正数时,最高位补0,而为负数时,最高位补0或1取决于编译      系统的规定,移入0的称为"逻辑右移",移入1的称为"算术右移"。(visualC++)是以算术右移。


37、C语言判断汉字:

1
2
3
4
5
6
7
if(is_zh_ch(char p)!=0);
int is_zh_ch(char p)
{
     if(~(p >> 8) == 0)
          return 0;
     return -1;
}

        和文字表示方法有关。西文字符一个字节(char)就可以表示(ASCII码中包括了所有的西文字符),因为一个char只有8位,最多表示256个文字,因此而非西文字符的文字(UNICODE)全部用两个字节表示,机器内部的最小存储单位是字节,为了区分连续的两个char表示的是一个UNICODE还是两个西文字母,规定UNICODE码的两个字节的最高位都是1。

1
2
if(~(p >> 8) == 0) 
    return 0;

的意思是,将char p的符号位(char为8位,即最高位)右移,若是UNICODE则p>>8后为1111 1111,然后按位取反为0

        其实原理上面说过了,UNICODE码最高位为1,即符号位为1,上面的代码和下面的等价:

1
2
3
4
5
6
int is_zh_ch(char p)
{
    if(p<0) 
        return 0;
    return -1;
}

上一篇:C#基础知识回顾--线程传参


下一篇:使用Spark SQL 构建流式处理程序