类型识别
typeid:用于返回表达式的类型
dynamic_cast:用于将基类的指针或引用安全的转换成派生类的指针或引用
Base &b1,*b2;//Base是基类 Derived是派生类
Derived &d = dynamic_cast<Derived&>(b1);
Derived *d = dynamic_cast<Derived*>(b2);
int x;
typeid(x);
typeid(b1);
typeid(d);
枚举类型
enum:枚举值默认从0开始依次加1,也可以指定枚举值,可以加类型限制,枚举成员是const。
enum color{red,yellow,green,};
color co = color::red;
enum sto {red = 1,yellow = 3,green = 6,};
int o = sto::green;
enum class pepr{aaa,bbb,ccc};//枚举成员被隐藏
类的成员指针
Scree myScree, *pScree = &myScree;
auto pmf = &Scree::get;
char c1 = (pScree->*pmf)();
char c2 = (myScree.*pmf)(2, 2);
union
一种节省空间的类
一个union可以有多个数据成员,但是在任意时刻只有一个数据成员。
union token
{
//默认情况下成员是公有的
char cval;
int num;
double d;
int fun() {}
token() {}
};
只有公有成员并不含构造函数时才能用,该初始值被用于初始化第一个成员,故只能有一个。
token fir_to = { 'a'};
token *to = new token;
to->cval = 'a';
匿名union不能包含受保护的成员或私有成员,也不能定义成员函数。
union {
char ch; int num; double d;
};
嵌套类:定义在一个另一个类的内部。
局部类:定义在一个函数的内部。
extren "C"
可以用C++代码调用其他语言编写的代码,前提编译器要兼容这些语言。
使用一般要放在头文件中
extren "C"{
#include<string.h>
}
pf指向一个c函数
extren "C" void(*pf)(int);