2013年1月12日
摘要: --什么是设计模式?设计模式有哪几种分类?每类模式重点解决什么问题?设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。--根据模式的目的,将模式分为三大类: 创建型模式:抽象化了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。 结构性模式:涉及到如何组合类和对象以获得更大的结构。结构型模式采用继承机制来组合接口或实现。 行为型模式:涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的复杂的控制流。常见的几个设计 阅读全文
posted @ 2013-01-12 22:18 Yogurshine 阅读(12814) 评论(1) 推荐(0) 编辑
摘要: 一.模板类(和类模板一样?)先看一个正确的例子#include <iostream>using namespace std;template <class T>class MyType {public: MyType(){t=0;} MyType (T ta){t=ta;} T getValue(); MyType operator+(MyType mt1){ MyType mt; mt.t=t+mt1.t; return mt;}private: T t;};template <class T>T MyType<T>::... 阅读全文
posted @ 2013-01-12 18:45 Yogurshine 阅读(369) 评论(0) 推荐(0) 编辑
摘要: C++多态机制:1)参数多态:模板2)强制多态:类型强制转换3)重载多态:函数重载,操作符重载4)包含多态:子类型的虚函数C++中采用虚拟函数实现包含多态,虚拟函数为C++提供了更为灵活的多态机制,这种多态性在程序运行时才能确定,因此虚拟函数是多态性的精华,至少含有一个虚拟函数的类称为多态类。包含多态在程序设计中使用十分频繁。举一个自己写的例子,包含着各种多态:#include <iostream>using namespace std;template <class T>class Base {public: Base(){d=0;p=NULL;} Base(int 阅读全文
posted @ 2013-01-12 17:04 Yogurshine 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。//coverage.cpp#include <iostream>using namespace std;class A{public: void ShowMessage();};class B:public A{public: void ShowMessage();};void A::ShowMessage(){ cout<<"Hello,This is A./n"; return;}vo 阅读全文
posted @ 2013-01-12 16:41 Yogurshine 阅读(8443) 评论(0) 推荐(1) 编辑
摘要: 一般继承(无虚函数覆盖)下面,再让我们来看看继承时的虚函数表是什么样的。假设有如下所示的一个继承关系:请注意,在这个继承关系中,子类没有重载任何父类的函数。那么,在派生类的实例中,其虚函数表如下所示:对于实例:Derive d; 的虚函数表如下:我们可以看到下面几点:1)虚函数按照其声明顺序放于表中。2)父类的虚函数在子类的虚函数前面。我相信聪明的你一定可以参考前面的那个程序,来编写一段程序来验证。一般继承(有虚函数覆盖)覆盖父类的虚函数是很显然的事情,不然,虚函数就变得毫无意义。下面,我们来看一下,如果子类中有虚函数重载了父类的虚函数,会是一个什么样子?假设,我们有下面这样的一个继承关系。为 阅读全文
posted @ 2013-01-12 12:12 Yogurshine 阅读(2146) 评论(0) 推荐(0) 编辑
摘要: 任何类型的指针变量都是占用4个字节。实现虚函数需要对象附带一些额外信息,以使对象在运行时可以确定该调用哪个虚函数。对大多数编译器来说,这个额外信息的具体形式是一个称为vptr(虚函数表指针)的指针。vptr指向的是一个称为vtbl(虚函数表)的函数指针数组。每个有虚函数的类都附带有一个vtbl。当对一个对象的某个虚函数进行请求调用时,实际被调用的函数是根据指向vtbl的vptr在vtbl里找到相应的函数指针来确定的。编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一行。如果类中有N个虚函数,那么其虚函数表将有N*4字节的大小。 虚函数 阅读全文
posted @ 2013-01-12 11:14 Yogurshine 阅读(2032) 评论(0) 推荐(0) 编辑
  2013年1月11日
摘要: 1.派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,但是这些成员的访问属性在派生的过程中通过继承方式可以来调整。(个人理解:派生类复制了基类的所有东西,但是防止派生类的误用,或者基类的有些属性子类用不到(继承是全盘拷贝的),就通过继承方式public\private\protected来限制。)2.派生类成员的构成1)继承基类成员2)改造基类成员 由于基类成员在派生类中可能不起作用,但也被继承下来,在生成对象时要占用内存空间,造成浪费。 改造基类的方法有:一是继承方式来控制,改变基类成员在派生类中的访问控制属性。 二是重载成员函数,则基类成员在派生类中被覆盖(但是仍然存在 阅读全文
posted @ 2013-01-11 22:06 Yogurshine 阅读(497) 评论(0) 推荐(0) 编辑
摘要: 派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,但是这些成员的访问属性在派生的过程中通过继承方式可以来调整。第一:private,public,protected方法的访问范围.(public继承下) private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问 注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数第二:类的继承后方法属性变化: 阅读全文
posted @ 2013-01-11 21:32 Yogurshine 阅读(1021) 评论(0) 推荐(0) 编辑
摘要: 计算机内存中的对齐一、什么是对齐,以及为什么要对齐⒈现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。⒉对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况, 但是最常见的是如果不按照适合其平台的要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为 32位) 阅读全文
posted @ 2013-01-11 19:38 Yogurshine 阅读(1024) 评论(0) 推荐(1) 编辑
摘要: 1.类属类按照类定义中是否带参数,类可分为类属类与非类属类,采用参数化类型定义的类(也称为 类模板)称为类属类(generic class),或参数 化类(parameterized class)。它仅仅是描述 了一组类型的通用样板。反之,非类属类就是定义中不带参数的类。由于类属类里面所处理的对象的数据类型尚未确定,程序员不可以使用类属类来直接创建对象实例,即一个类属类还不能认为是一种真正的类类型。必须先类属类———(实例化)———具体的类-----(实例化)----具体的对象可分为:无约束类属类– 类属类实例化的实际类属参数可以是任何类型。无约 束类属类的实际参数的类型并不要求具有共同的祖先 阅读全文
posted @ 2013-01-11 16:41 Yogurshine 阅读(2397) 评论(0) 推荐(0) 编辑