摘要: 一:什么是静态对象? 对象的存储方式是静态的。 局部静态对象和类的静态对象。 局部静态对象:一个变量在函数内部定义,其生命周期跨越了该函数的多次调用。局部对象确保不迟于在程序执行流第一次经过该对象的定义语句时进行初始化。这样的对象一旦被创建,在程序结束之前都不会销毁。在定义局部静态对象的函数执行完毕后,该静态对象不会撤销。当该函数被多次调用的过程中,静态局部对象会持续存在并... 阅读全文
posted @ 2016-04-21 16:07 永不停息; 阅读(16370) 评论(1) 推荐(2) 编辑
摘要: 在了解这个概念前,需要了解这么几个概念。纯虚函数,虚函数,非虚函数纯虚函数: 被声明为纯虚函数的类一定是作为基类来使用的,含有纯虚函数的类被称为抽象类,抽象类不能实例化对象。因此纯虚函数一般用来声明接口。其派生类必须实现这个函数。纯虚函数在基类中可以有函数实现,也可以没有。声明纯虚函数的原因是,在基类往往不合适进行实例化,比如一个shape类,中的draw方法。必须为纯虚函数,因为他不是任... 阅读全文
posted @ 2016-04-21 16:07 永不停息; 阅读(2413) 评论(0) 推荐(0) 编辑
摘要: C++中类与类之间存在着两种名称遮盖关系,变量遮盖、函数遮盖。其本质都是名字的查找方式导致的,当编译器要找一个名字,它一旦找到一个相符的名字,就不会往下找了,因此遮掩本质上是优先查找那个名字的问题。 查找名字时,编译器先从子类开始,一旦找到了,就不再继续查找。无论普通函数,虚函数,还是纯虚函数,结果都是输出子类的函数调用。 避免遮掩继承而来的名称是因为,你在使用public继承而又... 阅读全文
posted @ 2016-04-21 16:07 永不停息; 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 单例模式是最常用的设计模式之一,对单例的理解:一个类有且只有一个对象(只能实例化一次,不能进行拷贝,赋值),并提供一个全局访问接口。例如windows中的任务管理器,打印机管理程序等。现在就单例模式的几种实现方式进行比较:1、最常见的单例写法 使用static私有变量,并提供一个静态方法作为单例的接口。让构造成为私有的,即该对象不能通过类外进行实例化。class Single... 阅读全文
posted @ 2016-04-21 16:06 永不停息; 阅读(13031) 评论(0) 推荐(0) 编辑
摘要: #include int main(){int a[1000000];//局部变量return 0;}编译运行后发现溢出错误。#include int a[1000000];//全局变量int main(){return 0;}编译运行后正常。在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分:1、 栈区(stack sagment):由编译器自动分配释放,存放函数的参数的值... 阅读全文
posted @ 2016-04-21 16:06 永不停息; 阅读(611) 评论(0) 推荐(0) 编辑
摘要: C++11标准新增加了一种存储方式----线程存储。C++11目前有四种管理数据内存的方式:自动存储静态存储动态存储线程存储自动存储在函数内部定义的常规变量为自动变量,使用自动存储。自动变量:指在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的。一般情况下,不作专门说明的局部变量,均是自动变量。自动变量也可用关键字auto作出... 阅读全文
posted @ 2016-04-21 16:06 永不停息; 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 问题:单例模式中,静态函数中实例化了类对象,私有构造函数得到执行。构造函数是非静态成员函数,难道静态函数中能调用非静态函数吗?class Singleton{public: static Singleton * getInstance();private: Singleton(); ~Singleton(); static Singleton * m_sglton ;//(... 阅读全文
posted @ 2016-04-21 16:05 永不停息; 阅读(5147) 评论(0) 推荐(0) 编辑
摘要: 赋值操作为什么要返回 reference to *this? 要弄清这个问题之前,先了解函数的返回值类型:返回值类型,返回引用类型返回值类型:返回的是一个对象的副本。 test operator= (const test &t) { ... cout i = t.i; cout << "拷贝" << endl; } test operator= (const test &t... 阅读全文
posted @ 2016-04-21 16:04 永不停息; 阅读(1314) 评论(0) 推荐(0) 编辑
摘要: 之前写拷贝构造函数的时候,以为参数为引用,不为值传递,仅仅是为了减少一次内存拷贝。然而今天看到一篇文章发现自己对拷贝构造的参数理解有误。 参数为引用,不为值传递是为了防止拷贝构造函数的无限递归,最终导致栈溢出。 下面来看一个例子:class test{public: test() { cout test.a(test t=ort)==test.a(test t(ort)) ... 阅读全文
posted @ 2016-04-21 16:04 永不停息; 阅读(12162) 评论(1) 推荐(4) 编辑
摘要: 在一个类中定义的类被称为嵌套类,定义嵌套类的类被称为外部类。对类进行嵌套通常是为了帮助实现另一个类,并避免名称冲突。对类嵌套往往为了帮助实现另一个类,并避免名称冲突。如下:class queue{private: struct Node{ Item item;struct Node *next }; ...};由于struct在默认情况下其成员为公有的, 所以Node实际上是一个嵌套类。作用域... 阅读全文
posted @ 2016-04-21 16:04 永不停息; 阅读(20375) 评论(2) 推荐(4) 编辑