随笔分类 - C++
摘要:1.不同的编译器在动态内存分配上的实现细节不同 2.malloc函数在内存申请失败时返回NULL 3.new关键字在内存申请失败时 a.可能放回NULL(老式编译器) b.可能抛出bad_alloc异常(新式编译器)
阅读全文
摘要:1.如果异常未被处理(main函数中抛出异常),最后terminate()会被调用,结束整个程序 2.terminate()是整个程序释放系统资源的最后机会 3.结束函数可以自定义但不能继续抛出异常 4.析构函数中不能抛出异常,否则可能会导致terminate()多次调用
阅读全文
摘要:1.统计对象中某个成员变量的访问次数 === 注意:对象(普通对象,只读对象) eg: include include using namespace std; class Test { int m_value; int const m_pCount; public: Test(int value
阅读全文
摘要:1.typename和class === 早期c++直接复用class关键字来定义模板,但是class关键字的复用使得代码出现二义性。这时才诞生了typename来代替class。 eg: include include using namespace std; template class Tes
阅读全文
摘要:1.编写程序判断一个变量是不是指针 === 知识点:c++中仍然支持C语言中的可变参函数 c++编译器的 匹配调用优先级: a.重载函数(1) b.函数模板(2) c.变参函数(3) 补充知识点: 当sizeof求函数的值时(sizeof(函数)),得到函数返回值类型的大小,不会去调用函数 eg:
阅读全文
摘要:1.类型识别 === 静态类型:变量(对象)自身的类型 动态类型:指针(引用)所指向的对象的实际类型 2.问题: void test(Base b) { / 危险的转换方式 如b正好指向子类,则没有问题。如果b正好指向父类,则此处则有风险 / Derived d = static_castb; }
阅读全文
摘要:1.catch语句中抛出异常 === eg: include include using namespace std; / 假设: 当前的函数式第三方库中的函数,因此,我们无法修改源代码 函数名: void func(int i) 抛出异常的类型: int 1 ==》 参数异常 2 ==》 运行异常
阅读全文
摘要:1.c++异常处理 === c++内置了异常处理的语法: try...catch... try 语句处理正常代码逻辑 catch 语句处理异常情况 try 语句中的异常由对应的 catch 语句处理(注意一个try语句块只能捕获一个异常给catch) try { double r = divider
阅读全文
摘要:1.异常与bug的区别 === 异常:是程序运行时可预料的执行分支 bug :是程序中的错误,是不被预期的运行方式 异常与bug的对比 异常: a.运行时产生除0的情况 b.需要打开的外部文件不存在 c.数组访问时越界 bug: a.使用野指针 b.对数组使用结束后未释放 c.选择排序无法处理长度为
阅读全文
摘要:1.单例模式 === 概念:定义一个类,使得这个类最多只能创建一个对象。(单例对象在系统的生命周期中都是存在的,所以单例对象在整个系统的运行中不释放) 思路: a.将构造函数的访问属性设置为private b.定义instance并初始化为NULL c.当需要使用对象时,访问instance值 空值
阅读全文
摘要:1.智能指针模板 === STL(头文件 memory )中的智能指针模板: auto_ptr a.生命周期结束时,销毁指向内存的空间 b.不能指向堆数组,只能指向堆对象(变量) c.一片堆空间只属于一个智能指针对象 d.多个智能指针对象不能指向同一片堆空间(当多个智能指针指向同一堆空间时, aut
阅读全文
摘要:1.数组模板 === 模板参数可以是数值型参数(非类型参数) template void func() { T a[N]; // 使用模板参数定义局部数组 } 数值类型模板参数的限制 a. 变量 不能作为模板参数 b. 浮点数 不能作为模板参数 c. 类对象 不能作为模板参数 d.... 本质:模板
阅读全文
摘要:1.多参数类模板 === 类模板可以定义多个不同的类型参数 template class Test { public: void add(T1 a, T2 b); }; Test t; 2.类模板特化(即实现模板中的特殊情况) === a.类模板特化:指定类模板的特定实现 b.部分类型参数必须显示指
阅读全文
摘要:1.c++中的类模板 === a.以相同的方式处理不同的类型 b.在类声明前使用template进行标识 c.用于说明类中使用的泛指类型T template class Operator { public: T op (T a, T b); }; 2.类模板的应用 === a. 只能显示指定具体类型
阅读全文
摘要:1.函数模板深入理解 === 编译器会对函数模板进行两次编译 对模板代码本身进行编译 对参数替换后的代码进行编译 注意事项: 函数模板本身不允许隐式类型转换 自动推导类型时,必须严格匹配 (类型必须严格匹配) 显示类型指定时,能够进行隐式类型转换 2.多参数函数模板 === 函数模板可以定义任意多个
阅读全文
摘要:1.泛型编程 概念:不考虑具体数据类型的编程方式 函数模板: template关键字用于声明开始进行泛型编程 typename关键字用于声明泛指类型 template <typename T> // template : 告诉编译器开始泛型编程 // typename : 告诉编译器T是一个泛指类型
阅读全文
摘要:1.关于动态内存分配 === new 和 malloc 的区别是什么? delete 和 free 的区别是什么? new 关键字与 malloc 函数的区别: a. new关键字是c++的一部分 malloc是由c库提供的函数 b. new以具体类型为单位进行内存分配 malloc以字节为单位进行
阅读全文
摘要:1.多重继承的问题(三) === 多重继承可能产生多个虚函数表 eg: include include using namespace std; class BaseA { public: virtual void funcA () { cout funcA(); // 调用指针,指向虚函数表。在表
阅读全文
摘要:1.c++中的多重继承 === a.c++支持编写多重继承的代码 b.一个子类可以拥有多个父类 c.子类拥有父类的成员变量 d.子类继承所有父类的成员函数 e.子类对象可以当做任意父类对象使用(退化) 语法规则: class Derived : public BaseA, public BaseB,
阅读全文

浙公网安备 33010602011771号