C++ 一些容易忽略的基本点
2015-06-06 19:46
369 查看
new 高级应用
delete 其他用途帮助函数严格匹配类型
char teststr[100] = { 0 };// 静态区
void test3()
{
// 堆区
int *p = new int[3]{1, 2, 3};
//分配到以teststr开头的空间内 全局静态区
int *p2 = new (teststr) int[3]{1,2,3};
for (int i = 0; i < 3; i++)
{
cout << p[i] <<" "<< &p[i] << " " << p2[i]<<" " << &p2[i] << endl;
}
// 这段内存可以反复利用 同理 栈区 都可以
// 无论堆栈静态区 都不能delete p2
int *p2_ = new (teststr) int[3]{4, 5, 6};
静态区对象优先main执行
基本数据类型malloc new一样
malloc free不会调用构造析构函数 不能混用
通过重载new 和delete 可以统计对象个数
规避一个指针被重复释放
函数模本和类模板 2这区别 函数模板使用不需要置顶类型 因为编译器会自动帮你做 类模板则不会
函数模板调用的时候才编译 否则不会进行语法检查
函数模板 返回两个值中的较小者 同时能正确处理字符串
可以重载string类的>运算符 相比c里面的宏 的确很灵活
C++ 新语法 自动推导数据类型
C++类 析构函数 为虚函数 多态
友元函数能访问私有数据成员
类型一致 的初始化可用initializer_list
如果是不一致的 可变参数模板
结构体具备类的所有功能
设置一个不允许回收不允许在堆上创建
重载delete new = delete删除函数
默认继承 struct公有 而class私有
有了初始值就不能私用大括号初始化
但是数组成员不能有初始值 而且只能用=来初始值
例如 字符数组不可以 字符指针可以
拓展作用域 类的声明
delete 其他用途帮助函数严格匹配类型
char teststr[100] = { 0 };// 静态区
void test3()
{
// 堆区
int *p = new int[3]{1, 2, 3};
//分配到以teststr开头的空间内 全局静态区
int *p2 = new (teststr) int[3]{1,2,3};
for (int i = 0; i < 3; i++)
{
cout << p[i] <<" "<< &p[i] << " " << p2[i]<<" " << &p2[i] << endl;
}
// 这段内存可以反复利用 同理 栈区 都可以
// 无论堆栈静态区 都不能delete p2
int *p2_ = new (teststr) int[3]{4, 5, 6};
静态区对象优先main执行
基本数据类型malloc new一样
malloc free不会调用构造析构函数 不能混用
通过重载new 和delete 可以统计对象个数
规避一个指针被重复释放
函数模本和类模板 2这区别 函数模板使用不需要置顶类型 因为编译器会自动帮你做 类模板则不会
函数模板调用的时候才编译 否则不会进行语法检查
函数模板 返回两个值中的较小者 同时能正确处理字符串
可以重载string类的>运算符 相比c里面的宏 的确很灵活
C++ 新语法 自动推导数据类型
C++类 析构函数 为虚函数 多态
友元函数能访问私有数据成员
类型一致 的初始化可用initializer_list
如果是不一致的 可变参数模板
结构体具备类的所有功能
设置一个不允许回收不允许在堆上创建
重载delete new = delete删除函数
默认继承 struct公有 而class私有
有了初始值就不能私用大括号初始化
但是数组成员不能有初始值 而且只能用=来初始值
例如 字符数组不可以 字符指针可以
拓展作用域 类的声明
非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用
一般对于不需修改操作的成员函数尽量声明为const成员函数,以防止产生const对象无法调用该成员函数的问题,同时保持逻辑的清晰
相关文章推荐
- (C语言)自写通讯录
- 【Merge Intervals】cpp
- C++对象模型:多重继承和虚继承的内存布局
- new和malloc的区别
- DirectX中设备创建,以及表面缓冲区的使用
- c++实现简单计算器
- c++实现简单计算器
- 【Insert Interval】cpp
- c语言移位操作
- MFC六大关键技术之仿真学习笔记(四)
- c++实现医院检验科排班程序
- 初次接触VC++加载自定义LIB 即静态链接
- 用C++实现打印小九九乘法口诀表
- [c++]复数的运算符重载
- C++的运算符重载(运算符重载如何选定重载的函数类型)--思考1
- C++ 简单实现MFC ListControl 点击列头排序
- 一起talk C栗子吧(第十回:C语言实例--最小公倍数)
- C语言连接MySQL(codeblocks)
- 设计模式C++实现(12)——备忘录模式2
- Java中调用c语言示例