C++ 读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”。随着 C++ 的流行,它的语法也越来越强大,已经能够很完善的支持面向过程编程、面向对象编程(OOP)和泛型编程,几乎成了一门独立的语言,拥有了自己的编译方式。 所以C和C++真正分家了。
class
和C中的struct
C++中的Class 是C中的 Struct的 更高级版本,所以在学C++时候,虽然它也支持结构体,但class对结构体进行了一些扩展,使得它更好用,尽量都使用class没毛病。
命名空间是为了解决合作开发时的命名冲突问题,如下:个体在自己的命名空间内使用同样的变量名。
namespace Li{
FILE* fp = NULL;
}
namespace Han{
FILE* fp = NULL;
}
namespace
是C++中的关键字,用来定义一个命名空间,语法格式为:namespace name{
//vaiables, functions, classes.
}
name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define 等,最后由{ }包围。
namespace
的使用规范::
Li::fp = fopen("one.txt", "r"); //使用小李定义的变量 fp
Han::fp = fopen("two.txt", "rb+"); //使用小韩定义的变量 fp
using
关键字或者声明整个命名空间 using namespace Li
using Li::fp;
fp = fopen("one.txt", "r"); //使用小李定义的变量 fp
Han :: fp = fopen("two.txt", "rb+"); //使用小韩定义的变量 fp
如果命名空间 Li 中还定义了其他的变量,那么同样具有 fp 变量的效果。在 using 声明后,如果有未具体指定命名空间的变量产生了命名冲突,那么默认采用命名空间 Li 中的变量。
std
命名空间std
,标准命名空间,即原来头文件里面实现的内容都在stl
命名空间中重写了。旧的 C++ 头文件,如 iostream.h、fstream.h 等将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在命名空间 std 中。
新的 C++ 头文件,如 iostream、fstream 等包含的基本功能和对应的旧版头文件相似,但头文件的内容在命名空间 std 中。
注意:在标准化的过程中,库中有些部分的细节被修改了,所以旧的头文件和新的头文件不一定完全对应。
标准C头文件如 stdio.h、stdlib.h 等继续被支持。头文件的内容不在 std 中。
具有C库功能的新C++头文件具有如 cstdio、cstdlib 这样的名字。它们提供的内容和相应的旧的C头文件相同,只是内容在 std 中。
cout 和 cin 都是 C++ 的内置对象,而不是关键字
,cout 和 cin 就分别是 ostream 和 istream 类的对象,只不过它们是由标准库的开发者提前创建好的,可以直接拿来使用。
new
和delete
运算符简介C++除了支持malloc和free之外,还增加了两个新的关键词 new 和delete,new用来动态分配内存,delete用来释放内存。
int *p = new int; //分配1个int型的内存空间
delete p; //释放内存
int *p = new int[10]; //分配10个int型的内存空间
delete[] p;
C++中,建议使用 new 和 delete 来管理内存,它们可以使用C++的一些新特性,最明显的是可以自动调用构造函数和析构函数
inline
内联函数详解使用内联函数的初衷:函数调用时有时间和空间开销的,程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。
这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。
内联函数的定义规范:在函数头加inline
inline void swap(int *a, int *b)
{///}
注意,要在函数定义处添加 inline 关键字,在函数声明处添加 inline 关键字虽然没有错,但这种做法是无效的,编译器会忽略函数声明处的 inline 关键字。
如下 :如果调用func的时候没有传递参数,就使用默认值(默认值只能放在形参最后,即后面的变量使用默认赋值)
//带默认参数的函数
void func(int n, float b=1.2, char c='@'){
cout<<n<<", "<<b<<", "<<c<<endl;
}
void swap1(int *a, int *b); //交换 int 变量的值
void swap2(float *a, float *b); //交换 float 变量的值
void swap3(char *a, char *b); //交换 char 变量的值
void swap4(bool *a, bool *b); //交换 bool 变量的值
函数的重载的规则:
参数传递其实就是一次赋值过程,而赋值是对内存进行拷贝,耗时耗力(尤其是数组、结构图、对象)。
C/C++禁止在函数调用的时候直接传递数组的内容,而是强调传递数组指针,而对于结构体和对象没有这种限制。
引用
(Reference)引用是一种比指针更加便捷的传递聚合类型(除了char int float等基本类型)数据的方式。
引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据,也可以修改这份数据。引用类型类似于Windows中的快捷方式,通过这些快捷方式和可执行程序本身都可以运行程序。
&
取代了*
type &name = data;
&的三种用法
&
是定义引用变量 如:type &name = data;
&
表示去地址&
的第三种用法是位运算中的与运算