C++要点
来源:互联网 发布:闻香知女人小说轩轩 编辑:程序博客网 时间:2024/05/18 12:01
求出两个数中较大的一个 ((a+b)+abs(a-b))/2
_onexit 注册一个或多个在main主函数执行完毕后再执行的函数,注册函数无参数,后注册的函数先运行。
打印源文件名和当前等号 _FILE_ _LINE_
当数组作为函数参数传递时,该数组自动退化为同类型指针
没有任何成员的类的sizeof值为1
内存分配:静态存储区(全局变量或static变量),栈(局部变量),堆(malloc或new)
malloc/free只分配内存,new/delete分配内存并调用构造与析构函数
new[]的对象定义了析构函数,将会在指针之前用一个int存放数组元素数量,delete []时,会根据计数调用每个元素的析构函数
placement new[]时A* p=::new A[5];A* pk=::new (p) A[5];如果A有析构函数,分配的内存会越界,并且会重复构造
main函数执行前会执行全局对象构造函数
0x0A0B 在内存中存放方式是 0B 0A
基类的指针或引用都可以指向派生类的实例,实现多态关系
只要基类的成员函数有virtual属性,子类和孙类此函数都会继承virtual属性
虚基类 B继承A,C继承B和A 或 B和C都继承A,D继承B和C,这时所有继承A的地方要加virtual,否则会重复调用A构造或堆出错或编译不过。
基类中有不同参数的同名函数,如果子类重写了此函数,基类的同名函数将不会被继承下来,基类中此函数的不同参数版本不可被调用。
基类构造后派生再构造,派生析构后基类再析构
构造函数不能为虚函数或纯虚函数
delete指向派生类的基类指针时,如果基类有虚析构时,会先调用派生类析构再调用基类析构,否则只调用基析构。
__cplusplus C++编译; NDEBUG非调试版; _CONSOLE控件台;
一个空类在创建时会根据需要默认创建四个成员函数:构造函数,拷贝构造函数,析构函数,重载赋值操作符
函数返回对象时,如果不直接赋值给一个对象,将自动赋值给一个临时对象并调用拷贝构造函数,出函数时马上调用临时对象的析构函数
explicit的构造函数不能在隐式转换中使用,volatile表示变量随时可以,不可在寄存器里获取
指针相减不等于指针指向地址相减.指针相减等于两地址差除以指针类型大小,不同类型指针不可相减
int a=0; const int* const c=&a;星号前是值常量,星号后是指针常量,第一个const可以和int互换,结果一样。
函数后面加const为const函数,不可修改成员变量,const函数可做为重载函数,const对象和非const对象都可以调用const函数,cosnt对象不可调用非const函数
mutable指定一个类成员为可变,即使类对象是以const定义,或在const函数中总可以被修改
内联函数编译时做参数类型检查,宏不做类型检查
全局变量定义在cpp中,在h中extern,包含到此h的都可以使用此全局变量.或在h中用static定义全局静态变量.效果一样(函数也一样)
类成员静态常量才能类中初始化,常量成员在构造中初始化,静态成员在类后初始化
数值前缀0八进制,0x十六进制;后缀L或LL表示long或long long;U表示unsigned,f表示float
int a[10]; int (*p)[10]=&a;p指向数组的指针,*p或p[0]首地址指针,**p或p[0][0]或(*p)[0]第一个元素值(方括号优先比星号大)
int a[10][2];int (*p)[2]=&a[0];指向单个数组元素为int a[2]的数组指针,可用p++操作指针.此例跳过2*sizeof(int)个字节
int a[10][2];int (*p)[10][2]=&a;指向二维数组,p++将跳过整个数组,如:10*2*sizeof(int)
int a[10];int (*a)[10];int (&a)[10];数组,数组指针,数组引用,都可用sizeof()得到数组大小,函数参数为int a[]的等于同指针
有符号和无符号数一起运算的结果是无符号
没有成员变量的类sizeof大小为1,有一个virtual以上的虚函数sizeof大小为4
__VA_ARGS__ 转递...形式的参数
AllocSysString必需用SysFreeString释放
类B继承类A,A* p=new B[2];这时如果B中有成员,p[1];将会错位,因为p是用的sizeof(A)的大小来计算索引位的。
指定一个模版类的友元声明template <class Type> friend class A;
srand要在每个线程初始化
struct X{
char s1:4;//从右到左1-4位
char s2:4;//从右到左5-8位
} x;
位结构:前面的在低位,后面的在高位
static_cast 继承关系转换(下行不安全),无关系转换(编译验证)
dynamic_cast 继承关系转换(上下行安全),必须有virtual函数
reinterpret_cast 强制地址转换
const_cast 移除const, volatile, __unaligned
通过中间指针void*,static_cast 和 reinterpret_cast可在无关指针间转换
int可通过static_cast转换为enum
delete 删除对象数组,如果对象带析构,会报运行错误
- 复习C要点
- C要点(一)
- C语言要点总结
- 嵌入式C编程要点
- C语言解惑要点
- c 函数要点
- C++/CLI 要点
- C语言复习要点
- Objective-C基础知识要点
- 《Effective C++》要点摘录
- C语言要点
- C语言要点
- C语言要点2
- C语言要点3
- C语言要点4
- C语言模块化要点
- c编程习惯要点
- c语言要点!
- Windows7下解决所有游戏不能全屏的问题。
- obtain debug logfile for R12 E-Business Tax (EBTAX)
- Crontab 定时执行任务 (
- 屏蔽右键
- String的==与equal和null
- C++要点
- 多个滑动门
- 重构者的20种死法
- C#-用Stopwatch类进行性能(时间)测试
- Linux Console Colors & Other Tricks
- 加载Loading进度条效果1
- UNIX 高手的 20 个习惯
- 下拉列表的操作 改变左右值
- 无废话C#设计模式之六:Builder