摘要:
--什么是设计模式?设计模式有哪几种分类?每类模式重点解决什么问题?设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。--根据模式的目的,将模式分为三大类: 创建型模式:抽象化了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。 结构性模式:涉及到如何组合类和对象以获得更大的结构。结构型模式采用继承机制来组合接口或实现。 行为型模式:涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的复杂的控制流。常见的几个设计 阅读全文
摘要:
一.模板类(和类模板一样?)先看一个正确的例子#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>::... 阅读全文
摘要:
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 阅读全文
摘要:
覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。//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 阅读全文
摘要:
一般继承(无虚函数覆盖)下面,再让我们来看看继承时的虚函数表是什么样的。假设有如下所示的一个继承关系:请注意,在这个继承关系中,子类没有重载任何父类的函数。那么,在派生类的实例中,其虚函数表如下所示:对于实例:Derive d; 的虚函数表如下:我们可以看到下面几点:1)虚函数按照其声明顺序放于表中。2)父类的虚函数在子类的虚函数前面。我相信聪明的你一定可以参考前面的那个程序,来编写一段程序来验证。一般继承(有虚函数覆盖)覆盖父类的虚函数是很显然的事情,不然,虚函数就变得毫无意义。下面,我们来看一下,如果子类中有虚函数重载了父类的虚函数,会是一个什么样子?假设,我们有下面这样的一个继承关系。为 阅读全文
摘要:
任何类型的指针变量都是占用4个字节。实现虚函数需要对象附带一些额外信息,以使对象在运行时可以确定该调用哪个虚函数。对大多数编译器来说,这个额外信息的具体形式是一个称为vptr(虚函数表指针)的指针。vptr指向的是一个称为vtbl(虚函数表)的函数指针数组。每个有虚函数的类都附带有一个vtbl。当对一个对象的某个虚函数进行请求调用时,实际被调用的函数是根据指向vtbl的vptr在vtbl里找到相应的函数指针来确定的。编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一行。如果类中有N个虚函数,那么其虚函数表将有N*4字节的大小。 虚函数 阅读全文