摘要:Factory1、定义创建对象的接口,封装对象的创建2、将实际创建工作延迟到子类中,例如,类A中药使用类B,B是抽象父类,但是在类A中不知道具体要实例化哪一个B的子类,但是在类A的子类D中是可以知道的。在A中无法使用 new B***()方法3、将创建工作延迟到子类中后,核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂,只提供工厂子类必须实现的接口,这样的好处是可以不用修改已有的工厂类的情况下增加新的产品(每一种产品,都分别对应相应的工厂子类负责其创建工作) 使用场景:用于一类类(所创建的产品继承共同的产品基类)的创建实现方式1:所谓的工厂方法模式,对每一个子类产品都分别对应一个工厂子
阅读全文
随笔分类 - 面向对象
摘要:引用就是变量的别名,对引用的所有操作,都是对其原变量的操作对变量声明一个引用,并不另外开辟内存单元,引用及原变量都代表同一变量单元声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量int a;int &b = a;//只是声明它和原有变量之间的关系,并不分配内存单元声明一个变量的引用之后,在运行期间,该引用一直与其代表的变量相联系,不能再作为其他变量的引用如下:int a1,a2;int &b = a1;int &b = a2;//不对,又企图使b成为变量a2的引用引用并不是一种独立的数据类型,它必须与某种类型的数据相联系,必须指定它代表哪个变量,对其进行初始化
阅读全文
摘要:1 class Student 2 { 3 public: 4 /*******************成员函数**************************/ 5 Student();//默认构造函数,若定义了有参构造函数,默认构造函数会被覆盖,需手动再定义,否则无法调用 6 ~Student();//析构函数 7 /*析构函数,在对象的生存期结束时自动执行 8 1、局部对象,在出作用域时执行其析构函数 9 2、静态局部对象:在程序执行结束或exit时执行10 3、全局对象:在程序执行结束或exit时执行11 */12 ...
阅读全文
摘要:对象的赋值与复制: 赋值:通过“ = ”运算符重载User a(10),b;b = a;复制:调用复制构造函数User b;User a(b);或者User a = b;//相当于User a(b);与赋值的区别,赋值是对一个已经存在的对象进行赋值(已经实现定义了被赋值的对象),而复制是从无到有建立一个新的对象,并使它与已有的对象相同。浅复制与深复制: 若对象中有指针成员,在复制时,只会将该指针成员的地址复制给新建立的对象,因此,两个对象中的指针成员都指向了同一块内存区域,在释放时会出现重复释放的问题。 需要手动定义复制构造函数,在构造函数中将为指针变量分配新的内存,是不同对象的指针成员指向不
阅读全文
摘要:C++中的异常类只能捕获普通异常,无法捕获内存异常,除数为零等错误。而后期语言,如java、C#能捕获所有错误,包括内存异常等。以下为C++的简单异常处理类:通过继承实现异常处理1、定义异常基类2、定义具体异常类,继承基类3、给具体异常类异常信息赋值 1 /*通过继承实现异常处理 2 1、定义异常基类 3 2、定义具体异常类,继承基类 4 3、给具体异常类异常信息赋值 5 */ 6 class Exception 7 { 8 public: 9 Exception()10 {11 }12 string ErrorMsg;13 string ErrorC...
阅读全文
摘要:代码如下View Code 1 #include <iostream> 2 #include <fstream> 3 #include <sstream> 4 5 using namespace std; 6 class Student 7 { 8 public: 9 int sId; 10 char sName[10]; 11 }; 12 13 //申明模版类 14 template <typename T> 15 class Link 16 { 17 private: 18 Link * pHead; 19 Link * pCur;...
阅读全文
摘要:构造函数:用以对类中数据成员进行初始化系统会自动生成默认构造函数(参数为空),但是若手动定义了带参的构造函数,会自动覆盖默认构造函数时若需要调用默认构造函数进行实例化,需要手动定义一个不带参的构造函数初始化列表:可通过初始化列表的方式对类数据成员进行初始化,如定义初始化列表:User():sId(0001),sSex(1)继承基类时在派生类中调用基类的构造函数,对基类进行初始化,实际上就是初始化列表。构造函数可以只在类体内声明,在类体外定义,且声明时不需要初始化列表,在定义时需要给出初始化列表(若有)。 有两种情况需要初始化列表: 数据成员中有常量成员:const int Id; 数据成...
阅读全文
摘要:从系统实现的角度看,多态性分为两种,静态多态性与动态多态性静态多态性:函数重载、运算符重载(本质上也是函数重载);动态多态性:在程序运行过程中才动态地确定操作所针对的对象,又称为运行时的多态性,一般通过虚函数(virtual function)实现。C++通过虚函数与指向基类的指针一起来实现多态:当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数,因此在派生类中重新声明该虚函数时,可以加virtual,也可以不加,但最好加virtual,使程序清晰。如果在派生类中没有对基类中的虚函数重新定义,则派生类继承其直接基类的虚函数。静态关联:在编译时即可确定其调用的虚函数属于哪一个类
阅读全文