02 2020 档案
摘要:问题一:如何判断一个函数是否会抛出异常,以及抛出那些异常? C++提供语法用于声明函数所抛出的异常 异常声明作为函数声明的修饰符,写在参数列表后面。 //可能抛出异常 void func1(); //只能抛出的异常类型:char和int void func2() throw(char,int); /
阅读全文
摘要:问题一:如果在main函数中抛出异常会发生什么? 如果异常无法处理,terminate()结束函数会被自动调用 默认情况下,terminate()调用库函数abort()终止程序 abort()函数使得程序执行异常而立刻退出 C++支持替换默认的terminate()函数实现 terminate()
阅读全文
摘要:问题一:统计对象中某个成员变量的访问次数(访问次数包括读的次数和写的次数) 遗失的关键字 mutable是为了突破const函数的限制而设计的 mutable成员变量将永远处于可改变的状态 mutable在实际的项目开发中被严禁滥用 mutable成员变量破坏了只读对象的内部状态 const成员函数
阅读全文
摘要:单例类模板程序 Singleton.h #ifndef _SINGLETLON_H_ #define __SINGLETLON_H_ template <typename T> class singletlon { static T* Instance; public: static T* Get_
阅读全文
摘要:智能指针的意义 现代C++开发库中最重要的类模板之一 C++中自动内存管理的主要手段 能够在很大程度上避开内存相关的问题(内存泄漏,指针,多次释放) STL中的智能指针(auto_ptr) 生命周期结束时,销毁指向的内存空间 不能指向堆数组,只能指向堆对象(变量) 一片堆空间只属于一个智能指针对象
阅读全文
摘要:模板参数可以是数值型参数(非类型参数) template <typename T,int N> void func() { //使用模板参数定义局部数组 T a[n]; } 数值型模板参数的限制 变量不能作为模板参数 浮点数不能作为模板参数 类对象不能作为模板参数 本质:模板参数是在编译阶段被处理的
阅读全文
摘要:多参数类模板,类模板可以定义多个不同类型的参数 template <typename T1,typename T2> class Test { public: void add(T1 a,T2 b); } //使用方式 //需要指定每一个类型参数 //int >T1 //float >T2 Test
阅读全文
摘要:思考:在C++中是否能够将泛型的思想应用于类? 类模板 一些类主要用于存储和组织数据元素 类中数据组织的方式和数据元素的具体类型无关 如:数组类,链表类,Stack类,Queue类,等 C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。 C++中的类模板
阅读全文
摘要:函数模板深入理解 编译器从函数模板通过具体类型产生不同的函数 编译器会对函数模板进行二次编译:对模板代码本身进行编译,对参数替换后的代码进行编译。 注意事项 函数模板本身不允许隐式类型转换 自动推导类型时,必须严格匹配。 显式类型指定时,能够进行隐式类型转换。 范例程序 #include <iost
阅读全文
摘要:思考问题:C++中有几种交换变量的方法? 交换变量的方法 1)定义宏代码块 优点:代码复用,适合所有的类型。 缺点:编译器不知道宏的存在,缺少类型检查。 #define SWAP(t, a, b) \ do \ { \ t c = a; \ a = b; \ b = c; \ }while(0) 2
阅读全文
摘要:问题一:关于动态内存分配 new和malloc的区别是什么? delete和free的区别是什么? new关键字与malloc函数的区别 new关键字是C++的一部分 malloc是由C库提供的函数 new以具体类型为单位进行内存分配 malloc以字节为单位进行内存分配 new在申请内存空间时可以
阅读全文
摘要:C++支持编写多重继承的代码 一个子类可以拥有多个父类 子类拥有父类的成员变量 子类继承所有父类的成员变量 子类对象可以当作任意父类对象使用 多重继承的语法规则 class Derived : public BaseA,public BaseB,public BaseC { };//多重继承的本质与
阅读全文
摘要:什么是抽象类? 面对对象中的抽象概念,在进行面对对象分析时,会发现一些抽象的概念!如下图所示: 在现实中需要知道具体的图形类型才能求面积,所以对概念上的图形,求面积是没有意义的! class shape { public: double area() { return 0; } }; shape只是
阅读全文
摘要:继承对象模型 在C++编译器的内部类可以理解为结构体 子类是由父类成员叠加子类新成语是你得到的 class Derived:public Demo { int mk; }; 实验验证 1 // 继承对象内存模型.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 2 // 3
阅读全文
摘要:回归class(对象)的本质 class是一种特殊的struct 在内存中class依旧可以看作变量的集合 class与struct遵循相同的内存对齐规则 class中的成员函数与成员变量是分开存放的,每个对象有独立的成员变量,所有对象共享类中的成员函,。 思考一个问题 对象内存布局实验 1 //
阅读全文
摘要:函数重写回顾 父类中被重写的函数依然会继承给子类 子类中重写的函数将覆盖父类中的函数 通过作用域分辨符(::)可以访问父类中的函数 Chidl c; Parent*p = &c; c.Parent::print(); //在父类中继承 c.print(); //在子类中重写 p->print();
阅读全文

浙公网安备 33010602011771号