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