C++
文章平均质量分 52
只爱编程的菜鸟
这个作者很懒,什么都没留下…
展开
-
函数与宏分析
宏与函数#define RESET(p, len) \ while(len > 0) \ ((char*)p)[--len] = 0;void reset(void* p, int len){ while(len > 0) { ((char*)p) [--len] = 0; }}(1)宏是由预处理器直接替换展开的,编译器不知道宏的存在(2)函数是由编译器直接编译的实体,调用行为由编译器决定(3)多次使用宏会导致最终可原创 2021-12-22 13:49:57 · 102 阅读 · 0 评论 -
C++中的异常处理
C++中的异常处理(上)C++异常处理:C++内置了异常处理的语法元素try…cathtry语句处理正常代码逻辑catch语句处理异常情况try语句中的异常由对应的catch语句处理try{ /* code */}catch(const std::exception& e){ std::cerr << e.what() << '\n';}C++中通过throw语句抛出异常信息C++异常处理:throw抛出的异常必须被catch处理原创 2021-12-21 23:50:11 · 788 阅读 · 0 评论 -
C中的异常处理
异常的概念:(1)程序在运行过程中可能产生异常(2)异常与Bug的区别异常是程序运行时可预料的执行分支Bug是程序中的错误,是不被预期的执行方式异常:运行时产生除0的情况需要打开的外部文件不存在数组访问时越界Bug:使用野指针堆数组使用结束后未释放选择排序无法处理长度为0的数组C语言经典处理方式: if…else…void func(){ if(判断是否产生异常) { 正常情况代码逻辑; } else {原创 2021-12-21 22:35:07 · 786 阅读 · 0 评论 -
单例类模板
单例模式:需求的提出在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance)。问题:如何定义一个类,使得这个类最多只能创建一个对象?单例类1要控制类的对象数目,必须对外隐藏构造函数思路:(1)将构造函数的访问属性设置为private(2)定义instance并初始化为NULL(3)当需要使用对象时,访问instance的值空值:创建对象,并用instance标记非空值:返回instance标记的对象#include <iostream>原创 2021-12-21 20:46:15 · 575 阅读 · 0 评论 -
数组类模板
数组类模板1预备参数:模板参数可以是数值型参数(非类型参数)template <typename T, int N>void func(){ T a[N]; //使用模板参数定义局部数组}func<double, 10>();数组型模板参数的限制:(1)变量不能作为模板参数(2)浮点数不能作为模板参数 //浮点数在内存中表示不准确(3)类对象不能作为模板参数本质:模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定。有原创 2021-12-21 19:54:43 · 157 阅读 · 0 评论 -
类模板深度剖析
类模板可以定义任意多个不同类型的参数:template <typename T1, typename T2>class Test{public: void add(T1 a, T2 b);};Test<int, float> t;类模板可以被特化:(1)指定类模板的特定实现(2)部分类型参数必须显示指定(3)根据类型参数分开实现类模板template <typename T1, typename T2>class Test{原创 2021-12-20 00:46:02 · 349 阅读 · 0 评论 -
类模板的概念和意义
在C++是否能够将泛型的思想应用于类?答案:是类模板:(1)一些类主要用于存储和组织数据元素(2)类中数据组织的方式和数据元素的具体类型无关(3)如:数组类、链表类、Stack类、Queue类,等C++中将模板思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。C++中的类模板:(1)以相同的方式处理不同的类型(2)在类声明前使用template进行标识(3)用于说明类中使用的泛指类型Ttemplate <typename T>class Op原创 2021-12-20 00:28:38 · 915 阅读 · 0 评论 -
深入理解函数模板
函数模板深入理解:(1)编译器从函数模板通过具体类型产生不同的函数(2)编译器会对函数模板进行两次编译对模板代码本身进行编译对参数替换后的代码进行编译注意事项:函数模板本身不允许隐式类型转换自动推导类型时,必须严格匹配显示类型指定时,能够进行隐式类型转换实验编程:函数模板的本质#include <iostream>#include <string>using namespace std;class Test{ Test(const Test&a原创 2021-12-14 23:26:23 · 696 阅读 · 0 评论 -
函数模板的概念和意义
C++中有几种交换变量的方法?实验编程:变量交换#include <iostream>#include <string>using namespace std;#define SWAP(t, a, b) \do \{ \ t c = a; \ a = b; \ b = c;原创 2021-12-14 00:34:46 · 114 阅读 · 0 评论 -
经典问题解析四
关于动态内存分配:new和malloc的区别是什么?delete和free的区别是什么?new关键字与malloc函数的区别:(1)new关键字是C++的一部分(2)malloc是由C库提供的函数(3)new以具体类型为单位进行内存分配(4)malloc以字节为单位进行内存分配(5)new在申请内存空间时可进行初始化(6)malloc仅根据申请定量的内存空间下面的代码输出什么?为什么?#include <iostream>#include <string>...原创 2021-12-13 23:53:54 · 1007 阅读 · 0 评论 -
被遗弃的多重继承下
多重继承的问题三:多重继承可能产生多个虚函数表(BaseA和BaseB存在虚函数,有虚函数表,Derived将继承两个虚函数表)编程实验:多重继承问题三#include <iostream>#include <string>using namespace std;class BaseA{public: virtual void funcA() { cout << "BaseA::funcA()" << end原创 2021-12-12 23:04:31 · 653 阅读 · 0 评论 -
被遗弃的多重继承上
C++支持编写多重继承的代码:(1)一个子类可以拥有多个父类(2)子类拥有所有父类的成员变量(3)子类继承所有父类的成员函数(4)子类对象可以当做任意父亲对象使用多重继承的语法规则:class Derived : public BaseA, public BaseB, public BaseC{};编程实验:多重继承问题一#include <iostream>#include <string>using namespace std;class Bas原创 2021-12-11 23:03:18 · 226 阅读 · 0 评论