C++语言知识点总结一
一、C++语言区比C语言更强大地方
1.C++支持面向对象
2.C++支持泛型编程
3.C++支持运算符重载
4.C++支持异常
二、C++程序
1.C++程序和C程程序的差别
1)c++使用g++编译器进行编译。
2)c++的文件后缀是.cpp/.C/.cc/.cx ,这四种都可以,但我们通常会选择.cpp
3)不再使用C的头文件,但是仍然兼容,包含C的头文件的时候将原来的.h去掉,前面加c,如<cstring>(C++的风格),当然也可以仍然使用C的的风格,如<string.h>,但是个人不推荐,C风格和C++风格混杂在一块显得不太统一。
4)标准C++头文件不再以.h为后缀。
5)C++新增了名字空间,在c++中,所有的常量、变量、函数、类等等都处在特定的名字空间中,如果在程序中不显示的指明,默认在"::"名字空间中。
许多标准函数都处于std::名字空间中,如标准输入输出分别为 std::cout,std::cin
名字空间的声明格式为:namespace namepace_name{...}
访问特定名字空间的成员的时候有三种形式 下面以标准std名字空间为例
1.using namespace std;//该std名字空间中的内容在该作用域可见(切记是可见)
2.using std::cout//把std名字空间中的cout对象引入当前作用域(切记是当前作用域,要注意函数重载的问题)
3.std::cout//在cout前面加其名字空间限定。
三、结构、联合、枚举、布尔、函数
1)结构
C++中结构是可以当做类来使用的,不仅可以声明成员变量,还可以声明成员函数,而C只能用来声名成员变量。c中创建结构体对象的时候需加struct关键字,而C++中可以省略,当然也可以保留。结构中如果不加访问控制符的话默认是public的访问权限,和c++中的类正好相反。
2)联合
同c,只是c++中支持匿名联合,联合可用于判断该机器数据传输是大端模式还是小端模式
#include<iostream>
#include<cstdio>
int main{
//匿名联合
union{
int m_x;
char m_y[4];
};
m_x = 0x12345678;
for(int i=0;i<4;i++)
printf("%x",m_y[i]);//看输出结果,如果是78562312则是小端,反之大端。
printf("\n");
return 0;
}
3)枚举
c++中的枚举已经单独独立出来,不同于c语言的整型特诊。如enum(a,b,c);enum x = 1;//词句在c语言中对,c++中错。
4)布尔类型
c++中的bool类型已经专门做为一种数据类型,逻辑真(true),逻辑假(false)。除'\0',0,NULL,false以为的其他任何数据赋值给bool类型变量,其结果都为true。
5)函数和函数重载
5.1 c++中的函数不再支持c语言中的隐式声明,调用前必须先声明或定义,返回类型int不能省略。
5.2 同名,返回值或参数表不同的函数可以构成重载,其实质是编译器在编译的阶段为重载的函数进行了换名,其本质还是不可以重名的。如果不想让编译器进行偷偷的换名,需要加上extern "C" 关键字。
四、哑元和函数默认值、内联函数
1)哑元
在c++中允许使用只有形参类型,没有形参变量的哑元的形式声明函数,如void study(int),哑元的作用是为了函数间的区别以及向下兼容。操作符重载中的前++和前--的重载就用到了哑元。
2)函数默认值
函数形参允许设置默认值,设置默认值后如果在代码段中没有再为该形参赋其他的值,就按默认值来计算,形参默认值为右对齐。
3)内联函数
内联函数的特点:在代码执行的时候,内联函数会在调用它的地方展开,就向宏函数的展开类似,但是宏函数不能访问类中的成员函数,而且用宏的话存在一定的潜在风险,所有就有了内联函数
内联函数一般都定义在类中,一般代码短小的函数可以考虑使用内联,可用内联关键字inline修饰函数,但该还函数最终是否内联取决于编译器。
五、c++的内存分配
c++中一般用new和delete关键字实现动态内存的分配和删除。如 int* p = new int(100);int* p1 = new int[25];delete p;delete p1;这就是一般的分配和删除内存
还可以定位分配内存。如
char a[100] = {};
new(a)int[25];
定位分配不需要显示delete 了,内存会随着a的释放而释放。
六、使用引用应该注意的问题
1.引用必须初始化,而且必须用变量初始化。
如:int& a = 10;//错
cont int& a = 10;//可以,此为常引用。
2.引用不能为空、引用不能为其他引用
浙公网安备 33010602011771号