C++学习:记录1

1.头文件
在C++中,和C语言一样有以.h为扩展名的头文件。在头文件中存储着对于文件所包含内容的介绍。但在头文件中,还有为了防止被重复引用的宏定义,这些宏会在没有被定义的时候被定义然后编译文件。如果这个头文件的宏已经被定义了,那就说明,这个头文件已经被调用过了,也就不需要再次编译。在引用头文件的时候,和c语言一样,都是用尖括号<>或者“”来引用(#include <stdio.h>)。双引号引用非标准库文件,先在系统源文件目录找,找不到再去默认目录,尖括号只能去默认目录或者括号内路径·。

2.源文件构成
和C语言不同,以.cpp为扩展名,一般包含版权、声明、对于头文件引用和实现代码。源文件也是我们主要编写的文件。

3.基本要素
(1)标识符和关键字和c语言几乎没有区别,只能包含字母、数字和下换线,首字母不能是数字,自己创建的标识符整体不能与关键字相同。
(2)常量变量和他们的储存类型也没有差别。常量放在静态空间(只读的内存区域),常量不能被修改(包括但不限于重新赋值)。
四种储存类型中,
用external声明可以访问别的文件共享的变量值。
用static声明的静态变量在函数调用结束时,并不释放而是继续保留之前的值。
用register声明的变量放置在CPU寄存器,所以访问更快,但是只能用作局部变量
用auto声明的变量也是我们默认不使用关键字声明变量时自动使用的。我们默认所有局部变量都是auto型,且auto型不能为全局变量。
(3)数据类型上与c语言也没有太大差别(数据类型包括并不限于字符、数组、结构体和指针类型等)。但是有几点需要我特别注意。
a) 枚举类型
使用enum关键字定义。可以提供自己定义的有意义的常量来使用,可以用这些常量来代替原来用来代替状态的0、1、2之类的不清晰的状态。
在此类型中,一个常数值如果没有定义,默认为上一个的值加1,第一个默认为0。
b) 结构体
可以在声明时只声明,之后在定义具体的,也可以同时声明和定义。如果结构体只在这一个地方使用,更可以不写出结构体名称,只给出要用到的此类结构体的变量名。
结构体之间可以互相赋值。
可以使用 …:长度 来强行要求所占字节数。更可以不给出变量名来预留空间(如char: 4;在结构体中可以预留4字节空间)
c) 共用体类型统一时间只能有一个成员起作用,并且是最后一次存放的成员。但分配空间按照最大的分配。
d) 使用 数据类型 &引用对象 = 目标对象 的方法可以创建引用对象。引用和目标用同一地址。同时注意不要把此处&符号和地址里的混了。
e) 两整数相除,结果仍是整数
f) 关系运算符结果只有真假,也就是0和1。因为运算顺序,可能会对数值产生影响(如 int i = 9>8>7;此时i为0)
g) 位运算符&(与)、|(或)、^(异或)、~(取反)、<<(左移)、>>(右移)对二进制码进行运算
h) 32位操作系统里sizeof测试指针长度永远是4字节。
i) 手动分配的堆空间,一定要释放(如new和delete)
j) 逗号表达式取最右边表达式的值,但是逗号运算符优先级及其低,甚至在=之下,在常用运算符里可以说有着最低的优先级。

4.语句
与C语言有很多相同点(包括并不限于if,while嵌套循环等)。
但有几点需要我注意。
(1)用{}包起来的复合语句中定义的变量,作用域范围也只到复合语句的结束。
(2)跳转语句goto可以跳到标号处,但是会让程序的执行顺序变得混乱,要慎用。标号就是标号名加冒号,如 label: 就是一个标号 。

5.面对过程
(1)函数定义和调用与java并无太大差别。
(2)可以在函数的参数中使用默认值参数。如果有传递的参数就是用传递进来的参数,但是如果没有传递进来的参数,则默认值参数被直接使用,而不是没有参数传入。如果函数要传递多个参数,那么默认值参数要放在最右侧。
(3)数组参数使用和C语言无太大差别,但是要注意,如果需要限制传递指定长度数组,可以用数组的引用作为函数参数,这将吧数组长度作为参数的一部分。( void test(int (&array)[10]))。
(4)和C语言一样有值传递和引用传递2种传递方式。值得注意的是,如果参数是数组、指针或引用类型,函数为引用传递。引用传递修改了地址中的值,所以指向这个地址的值都会改变。
(5)省略号参数
可以用省略号参数代替繁复的 ”%s %d %s %s %s %d”,用符号‘…’来表示有一个或多个参数。在读取参数时,使用va_list类型和va_arg、va_end、va_start3个宏。
va_list后跟这一串被省略的参数被标示成什么名字。(以下称标识名)
va_start后跟(标识名,第一个参数名(此参数没有被省略)),表示开始的参数。
va_arg后跟(标识名,类型),找到一个在此标识名标记的参数中,一个此类型参数。
va_end后跟(标识名),表示结束,没有要是用的省略的参数了。
(6)内联函数
用inline关键字定义,在调用处直接将代码复制到那里,而不是跳到调用函数。因此增加了程序代码,但是如果使用在代码少且经常使用处,则可以提高运行效率,因为不用频繁跳转。
(7)重载函数和java没有太大区别,但是要注意
返回值类型、在参数类型不是指针或引用时的const关键字、不同参数默认值、typedef自定义类型不作为重载区分。
(8)作用域和生命周期和java大同小异,注意
函数内定义了和全局变量相同的变量时,可以使用符号‘::’来访问全局变量(如printf(“%d\n”, ::test);)。
(9)命名空间
a) 用namespace定义
b) 使用空间中对象,需要使用命名空间做前缀(name::)或者使用using命令引用整个命名空间,以此来避免在每一个对象前加前缀。
c) Using命令的作用域是从引用处到所处作用域的结束。
d) 同一个命名空间可以在多个文件中进行定义,且此时所有对象都在同一空间中,要注意不同文件中不能有重名对象,此时本空间内容为多个文件综合。
e) 使用嵌套命名空间时,要用外层和内层的命名空间一起做前缀。
f) 可以创建未命名的命名空间,此空间只能在当前文件中使用。对象名不能与全局对象相同(命名的就可以)。
g) 和局部变量同名的,会引用局部变量。
(10)函数模板
可以用template关键字定义模板,

6.面对对象
在这一块我们可以和java进行对比。他们很相似,但是有很多要注意的不同点
(1)类的结尾处;写在{}外
(2)可以再class外对方法进行定义(但是要用::来标记属于哪一个类)(如testClass::testMethod(){})
(3)在定义数据成员时,不能同时进行初始化。但是可以在构造函数中给值。
(4)在类里使用 private: 统一定义底下的变量和方法是什么访问权限,而不是一个个单独写。
(5)和java一样,在定义类的对象时,才分配存储空间,在单纯定义类时则不分配
(6)在方法最后加入const关键字可以使用户在本方法中不能修改类的数据。
(7)类的对象为常量指针时,只能调用带有const的方法。
(8)构造函数和java理念基本相同,但要注意在C++中,在构造函数里可以使用“:”运算符初始化成员。(如:price(32),num(15);)
(9)在传递方式是值传递并且传递一个类时,会调用这个类的复制构造函数。使用引用类型作为传递,则不会。
(10)析构函数在对象超出范围或使用delete运算符释放对象是被调用,用于释放空间。没有返回值,void型都不能用。没有参数,不能重载,用“~”符号放在前面标识。
(11)在类体中定义的函数,就算没有inline关键字,也默认是内联成员函数。
(12)静态数据成员在类里面可以直接作为默认参数使用。
(13)静态成员函数不能定义为const成员函数。
(14)函数实现代码在函数体之外,实现部分不能加static关键字。
(15)重载运算符
可以使用operator关键字重载运算符,以此重新定义当使用此运算符作用于本类时,运算符的作用。
注意不能随意交换顺序,要使用重载时格式。
“::”,“?”,“:”,“.”这四个运算符不能重载。
(16)友元类和友元函数
与java不同,它使得私有成员可以被外部访问!
使用friend关键字定义。如friend class Ctest; 意味着Ctest类是自己的友元类,可以使用自己的私有成员。
友元函数可以是全局函数。
(17)继承的整体思想和java没有太大差别,但是需要注意
a) 使用“:”表示继承(class COperator: public CEmployee表示COperator继承CEmployee)。
b) Private型成员不被继承。
c) 三种派生类型,public, protected, private。
d) 在方法前加virtual使方法变为虚方法,这样可以根据运行时的类型来决定调用那个类的方法,否则会根据定义时的确定。
e) 在虚方法最后加上=0会得到抽象方法,特性与java相同。
f) 构造函数先父后子,析构函数先子后父。
g) 与java不同,C++可以实现多继承!同时继承多个类时,如果有父类中有同名函数,使用时要标识出来。
h) 如果一个自定义类型在一个类中被定义,那么在这个类中这个类型可以被用来解析成员函数参数。
i) 一般来说,在嵌套类的情况下,外围类不能访问嵌套类的私有成员,但是还是可以用友元类的方法解决这一问题。
j) 如果一个类被定义在函数中,那将成为一个局部类,只能在这个函数中使用。
k) 类模板
同一类型的类模板,其中的静态数据成员是共享的。
l) 异常处理的思想与java大同小异,要注意的是
Catch后用“…”来代表处理所有异常。异常的提醒有弹出窗口。

发布了9 篇原创文章 · 获赞 0 · 访问量 107

猜你喜欢

转载自blog.csdn.net/qichunhao/article/details/104001612