int,float,double,short,char,bool(参考基本数据长度,格式化输出)
string:字符串操作,可以通过下标访问某个字符。
list,set,map:都有点像链表,不可以通过下标直接访问。
vector:数组功能的扩展,可以通过下标来访问对象。
include:#include
extern:从某个文件中导入某个函数或变量
struct:结构体,每个变量都会被分配不同的内存空间。
union:共享内存,就是几个变量都能访问同一段内存。
const:他是封禁的作用,主要分封禁地址和封禁星号。
static:它修饰的变量或函数表明只能被初始化一次,然后其他所有人都共用这段内存的内容。
define:#define INTPTR1 int* 没什么坑,但一般用于定义别名和常量
typedef:typedef int* INTPTR2有很多坑,特别是指针的别名时,别想当然,最好自己测试下。
用于申明一个类,下面是类中出现的关键字:
(1)private,只能自己访问
(2)protected,子类可以访问
(3)public,所有可以访问
(4)friend,你是我朋友,你能访问我所有的
(5)单冒号:(a)继承;(b)初始化
(6)父类指针指向子类对象:虽然父类和子类都被编译,但父类指针只能访问父类自己的内容,子类你可访问不了。
父类指针最多只能调用子类对父类中重写的函数:但是你如果想访问使用父类指针来访问子类中的函数,可以在父类中声明与子类命名参数完全相同的函数,并在函数前使用virtual修饰符,那么就可以调用子类中被重写的函数了。
(7)构造:类中使用,一般不需要自己定义,但如果有功能需要实现就可以自定义。
(8)析构:类中使用,一般不需要自己定义,但如果在类中使用了new或malloc来申请堆内存,那么在析构的时候一定要delete或free。(new,delete;malloc,free这2组都是用来申请堆内存)
析构有时需要加virtual:因为如果你定义了一个父类指针指向子类对象,那么在析构的时候你改调用子类的析构函数还是父类的析构函数?不管调用哪个都有可能造成内存释放不完全。所以就需要在父类的析构函数前加上virtual修饰符,这样他就会将父类和子类都析构。
(9)纯虚函数(virtual):被用来规范接口的,就是在一个纯虚类中只申明实现功能,其他类自己去实现这个功能,最后通过纯虚类将实现功能整合到一起。
(10)拷贝构造函数:拷贝构造使用格式固定,一般不用自己写,除非需要拷贝指针。
作用域的限定,具体可分为
(1)::a,前面直接加双冒号表示全局变量;
(2)类的成员函数或成员变量的访问
class Mytest()
{
public:
void Test();
};
void Mytest::Test()
{
printf("Test.\n");
}
(3)命名空间(涉及关键字namespace和using),比如std::cout等
(4)静态类型函数和类型变量的访问
class Mytest()
{
public:
static int a;
}
Mytest::a = 3;
函数模板:
template
T findmax (T arr[], int len)
{
T val = arr[0];
...
}
类模板:
template
class MyTest()
{
public:
T Sum(T a, T b)
{
return a+b;
}
};
这个声明,有时称为前向声明(forward declaraton),在声明之后、定义之前,类A是一个不完全类型(incompete type),即已知A是一个类型,但不知道包含哪些成员。
不完全类型(incomplete type)只能以有限方式使用。不能定义该类型的对象。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。