
c++语言
文章平均质量分 51
夏天的呆子
这个作者很懒,什么都没留下…
展开
-
时间复杂度和空间复杂度
时间复杂度: 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用”O”来表示数量级,给出算法的时间复杂度。 T(n)=O(f(n)); 它表示随着问题规模的n的增大,算法的执行时间的增长率和f(n)的增长率相同,这称作算法的渐进时间复杂度,简称时间复杂度。而我们一原创 2017-04-17 22:33:52 · 407 阅读 · 0 评论 -
C++总结
持续创新空间房价的肯定和时间哟偶帮你原创 2017-06-13 15:54:59 · 199 阅读 · 0 评论 -
如何定义一个只能在栈/堆上生成对象的类
如何定义一个只能在栈上生成对象的类?(考察对C++语法的理解及应用) 分析:对象可以在栈上生成也可以由我们在堆上new出来。要想只在栈上生成对象而不能在堆上生成对象在类外是无法完成的,因此我们必须从类的内部入手。 我们知道,类对象的构造是由构造函数完成的,如果我们把构造函数声明为保护的,使得不能在类外调用构造函数,这样的话就不能在类外new出对象了,但同时也不能在类外定义对象了。为此我们可以在类原创 2017-07-15 23:00:08 · 360 阅读 · 0 评论 -
【C++常见面试题:实现一个string 类】-深拷贝&浅拷贝&string类
面试中string类的正确写法 http://coolshell.cn/articles/10478.html String的实现: //备注: 只在构造函数里面调用new char[],只在析构函数里面调用delete[]; 每个函数都只有一两行代码,没有条件判断;#include<iostream>#pragma warning(disable :4996)using namesp原创 2017-07-20 15:24:20 · 394 阅读 · 0 评论 -
多态性与虚函数
关于多态: 从系统的角度看,多态分为静态多态和动态多态。 静态多态是利用重载实现的,在程序编译时确定要调用的是哪个函数,因此静态多态又称为编译时多态。 动态多态和虚函数主要研究的是:当一个基类被继承为不同的派生类时,各派生类可以使用与基类成员相同的成员名,如果在运行时用同一个成员名调用类对象的成员,那么会调用哪一个对象的成员? 也就是,通过继承而产生了相关的不同派生类,与基原创 2017-07-20 19:56:31 · 445 阅读 · 0 评论 -
函数重载
什么是函数重载? 在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。函数重载其实是”一个名字,多种用法”的思想,不仅函数可以重载,运算符也可以重载。 例如:现在要实现一个加法运算,运算子可以是整形也可以是浮点型,就可以通过重载实现。int ADD(int原创 2017-08-18 10:03:35 · 254 阅读 · 0 评论 -
malloc/free与 new/delete
malloc和free详见《C和指针》P221;new详见《C++primer》P423;简答题:malloc/free与 new/delete的区别是什么?(10分)1、运算符new可以自动计算所要分配的空间的大小。2、new能够自动返回正确的指针类型,不需要用户对返回指针进行强制类型转换。3、new是运算符,效率更高。4、new分配的空间只能用显示的用delete释原创 2017-04-12 12:42:37 · 355 阅读 · 0 评论 -
new/delete和new[ ]/delete[ ]的底层调用和简单实现
在使用new的时候做了两件事: 1、调用operator new分配空间 2、调用构造函数初始化对象 在使用delete的时候也做了两件事: 1、调用析构函数清理对象 2、调用operator delete函数释放空间 在使用new[N]的时候也做了两件事: 1、调用operator new分配空间 2、调用N次构造函数初始化N个对象原创 2017-08-18 10:12:48 · 319 阅读 · 0 评论 -
C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 对C++ 了解的人都应该知道虚函数(Vir转载 2017-07-29 09:12:30 · 165 阅读 · 0 评论 -
不同类型数据间的转换
1、转换构造函数 转换构造函数的作用是将一个其它类型的数据转换成一个类的对象 以复数类Complex为例: 转换构造函数是构造函数的重载,它只有一个形参,如 Complex(double r) { _real=r; _imag=0; } 其作用是将double类型的参数r转换成Complex类的对象,将r作为复数的实部,虚部为0。用户可以自己根据需要定义转换转载 2017-07-29 11:31:12 · 766 阅读 · 0 评论 -
类型萃取
在C++中我们可以通过typeid来获取一个类型的名称(内置类型和自定义类型都可以),但是我们不能用这种方式获取来的名称做变量的声明。在C++中我们可以通过类型萃取的方式来区分内置类型和自定义类型。例如:我们在Seqlist中要用到类型萃取,因为内置类型我们可以通过memcopy和memmove这两个方式进行拷贝,自定义类型或string我们要通过赋值的方式拷贝。这样的话会提高效率。类型萃取的方原创 2017-04-17 18:00:33 · 307 阅读 · 0 评论 -
类型转换
1. 旧式类型转换–隐式类型转换&强制类型转换 【缺陷】 强制转换的可视性比较差, 所有的转换形式都是以一种相同 形式书写, 难以跟踪错误的转换。 C++强制类型转换 标准C++为了加强类型转换的可视性,引入了四种命名的强制类 型转换操作符: static_cast/reinterpret_cast/const_cast/dynamic_cast static_cast stat原创 2017-05-14 13:48:18 · 163 阅读 · 0 评论 -
日期类
//#include <iostream>//using namespace std;////class Array//{//public:// Array(size_t size)// {// _array = (int*) malloc(sizeof(int)*size);// }// }//// ~Array()// {// free原创 2017-04-17 22:57:11 · 194 阅读 · 0 评论 -
String类(****)
速度飞规划局快乐原创 2017-04-12 12:59:09 · 347 阅读 · 0 评论 -
异常处理
程序消亡的一般形式:无疾而终、自杀、他杀、C异常处理传统错误处理方式: 1.终止程序(除数为0) 2.返回一个表示错误的值,附加错误码(GetLastError()) 3.返回一个合法值,让程序处于某种非法的状态(坑爹的atoi()) 4.调用一个预先准备好在出现”错误”的情况下用的函数(回调函数)。 5.暴力解决方式:abort()或者exit() 6.使用goto语句 7.setj原创 2017-04-20 09:14:18 · 252 阅读 · 0 评论 -
智能指针
C++中的动态内存需要用户自己来维护,动态开辟的空间,在出函数作用域或者程序正常 退出前必须释放掉,否则会造成内存泄露,有时我们已经非常谨慎了,然防不胜 防: 智能指针特性: 1.构造和析构->RAII (初始化)(释放资源) //自动析构函数释放管理对象 2.operator*和operator-> //让我们能像原生一样使用智能指针访问管理对象 3. a.AutoPtr->管理权原创 2017-05-14 10:30:11 · 290 阅读 · 0 评论 -
继承
继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持 原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设 计的层次结构,体现了由简单到复杂的认知过程。 总结: 1. 基类的private成员在派生类中是不能被访问的,如果基类成员不想在类外直接被访问,但需要 在派生类中能访问,就定义为protect原创 2017-05-14 10:46:05 · 199 阅读 · 0 评论 -
多态
对象的类型 静态类型&动态类型 多态 【静态多态】编译在编译间完成的,编译据函数实参的类型(可能会进行隐式类型转换),可 出要调用个函数,如果有对应的函数就调用函数,则出现编译。 【动态多态】在程序行间(非编译)所引用对象的实际类型,据实际类型调用应的方 。 使用virtual关键字类的成员函数时,指明函数为虚函数,派生类需要重新实现,编译将实 现态定。 【动态绑定条件】 1、必须原创 2017-05-14 10:52:51 · 219 阅读 · 0 评论 -
I/O
流 “流”即是流动的意思,是物质从一处向另一处流动的过程。 C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向 外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻 为“流”。 为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成 某方面的功能。 C++ I/O流 C++系统实现了一个庞大的类库,其中ios为基类,其原创 2017-05-14 13:55:22 · 313 阅读 · 0 评论 -
模板&泛型编程
如何编写一个通用加法函数? 使用函数重载,针对每个所需相同行为的不同类型重新实现它 【缺点】 1、只要有新类型出现,就要重新添加对应函数。 2、除类型外,所有函数的函数体都相同,代码的复用率不高 3、如果函数只是返回值类型不同,函数重载不能解决 4、一个方法有问题,所有的方法都有问题,不好维护 使用公共基类,将通用的代码放在公共的基础类里面 【缺点】 1、借助公共原创 2017-05-14 14:06:13 · 175 阅读 · 0 评论 -
多态
多态的实现机制: C++中虚函数的主要作用就是用来实现多态,就是使用基类的指针或者引用调用重写的虚函数,当父类的指针或引用指向父类对象时调用的是父类虚函数,当指向子类对象时调用的是子类的虚函数。那么这又是怎么实现的呢 这都是通过虚函数表实现的,虚函数表是通过一块连续内存来存储虚函数的地址。这张表解决了虚函数重写(地址进行覆盖)的问题 。在有虚函数的对象实例中都原创 2017-08-29 16:08:46 · 193 阅读 · 0 评论