随笔分类 - C++
摘要:int &a = 1;//报错,引用需要一个合法的内存空间 const int & a = 1;//正确,类似于int temp = 1; const int & a = temp;
阅读全文
摘要:转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗?
阅读全文
摘要:单例模式:用来创建独一无二的,只能够有一个实例的对象。 单例模式的结构是设计模式中最简单的,但是想要完全实现一个线程安全的单例模式还是有很多陷阱的,所以面试的时候属于一个常见的考点~ 单例模式的应用场景:有一些对象其实只需要一个,比如:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当
阅读全文
摘要:1:简单工厂模式 简单工厂模式是属于创建型模式,又叫做静态工厂方法(static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出来哪一种产品类的实例. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一类产品类(这些产品类继承自一个父类或接口)的实例。打
阅读全文
摘要:1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数 两种情况下会出现这种内存泄露:一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存;二是在类的构造函数中动态的分配了内存,但是在析构函数中没有释放内存或者没有正确的释放内存 2. 没有正确地清除嵌套的对象指针 3.
阅读全文
摘要:打印结果是不定的,不一定为0代码奇怪的地方在于构造函数中调用了自己的另一个构造函数我们知道,当定义一个对象时,会按顺序做2件事情:1)分配好内存(非静态数据成员是未初始化的)2)调用构造函数(构造函数的本意就是初始化非静态数据成员)显然上面代码中,CLS obj;这里已经为obj分配了内存,然后调用
阅读全文
摘要:不是所有的函数都能自动地从基类继承到派生类中的。 构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么。 所以,在整个层次中的所有的构造函数和析构函数都必须被调用,也就是说,构造函数和析构函数不能被继承。 子类的构造函数会显示的调用父类的构造函数或隐式的调用父类的
阅读全文
摘要:我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中去找。 所以如果父类的成员函数加上virtual时,访问的时候是先在虚函数表中查找,如果找到了,就执
阅读全文
摘要:1.属性 new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。 2.参数 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。 3.返回类型 new操作符内存分配成功时,返回的
阅读全文
摘要:前言:引用是C++一个很重要的特性,最近看了很多有关引用的资料和博客,故在此对引用的相关知识进行总结 一、什么是引用 引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价 特别注意: 1.&不是求地址运算符,而是起标志作用 2.引用的类型必须和其所绑定的变量的类
阅读全文
摘要:一、父类指针指向子类对象 首先,来看一段代码: 结论:删除子类指针,无论如何会自动调用祖先类的析构函数(即使祖先类的习惯函数不是虚拟的),虽然这是非正常情况,但还是记一下。 第二段代码: 结论:正常情况下,子类祖先类的析构函数都是虚拟的,这样删除祖先类指针、子类对象的时候,可正确同时调用子类和祖先类
阅读全文
摘要:1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。 2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函
阅读全文
摘要:众所周知,C++虚函数是一大难点,也是面试过程中必考部分。此次,从虚函数的相关概念、虚函数表、纯虚函数、再到虚继承等等跟虚函数相关部分,做一个比较细致的整理和复习。 虚函数 OOP的核心思想是多态性(polymorphism)。把具有继承关系的多个类型称为多态类型。引用或指针的静态类型与动态类型不同
阅读全文
摘要:对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象B分配了内存并完成了与对象A的复制过程
阅读全文
摘要:1. 浅拷贝 所谓浅拷贝,指的是在对象复制时,只对对象的数据成员进行复制,但是遇到有动态成员如指针时就会出问题。 [c-sharp] view plain copy class Rect { public: Rect() // 构造函数,p指向堆中分配的一空间 { p = new int(100);
阅读全文
摘要:一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子 运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象 B 分配了内存并完成了与对象 A 的复制过
阅读全文
摘要:Debug和Release,主要是针对其面向的目标不同的而进行区分的。Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户...
阅读全文
摘要:时间复杂度是一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数...
阅读全文
摘要:在之前从来没有接触过回调函数,第一次听到这个概念的时候很蒙,心想这是啥,取搜了一些资料,讲的也不是很清晰,反倒我发现我的理解离头脑放光越来越远,索性先不管它。后来实在顶不住了,周围的大牛经常讨论“写一个回调”“我看一下你写的回调”,伴着空调低沉的声音,门外走廊都能听到有人在讨论“让我回调一下”,而我
阅读全文
摘要:之前经常见到这样的代码:typedef int (*Func)(int a ,int b);一开始不知道这是什么意思,每次翻阅资料和各位大牛博客之后一目了然,但是过了一段时间又忘记了,归根结底是当时学C的时候就没有重视这基础,再加上后来练习的越来越少,更是蒙了。于是记...
阅读全文