面向目标规划是一种思维,而C++恰好是一种面向目标的言语,在C++中规划类一般都会选用承继基类(父类),规划派生类(子类),承继和动态绑定的结合就奇妙的完结了实践的问题。可是怎么规划出一个强壮的类呢?今天在学习了纯虚函数今后,我又觉得分层规划的思维真的是一个十分棒的规划思维。
首要阐明一下我仅仅一个初学者,写出来的东西或许会有过错,说实在的没写过多少代码,可是我以为写代码是一个娴熟的进程,一个完结思维的进程。只要有了思维,才干完结好的规划,不断的考虑,不断的总结才干学到新学到的东西,才干到达更高的方针。
在C++中虚函数是指将一个类中的虚函数后边加上=0,就阐明该虚函数为纯虚函数。一般该函数设置为纯虚函数,那么该函数也就没有再次界说的必要了,由于存在纯虚函数的类便是一个笼统类,是不行以创立目标的,不能创立目标也就不会自动的调用该函数,哪怕在动态绑定的情况下也不会,因而不需求为该函数界说相关的操作,实质上在此处声明仅仅阐明在该派生类中需求重写基类的虚函数,至于是否真的复写,不要去关怀。
//存在纯虚函数的类为笼统类
class AbstructClass:public Base
{
public:
//结构函数
AbstructClass(…):Base(…),…{}
//析构函数
~AbstructClass(){…}
//这便是纯虚函数,一般func在基类中就为虚函数,因而virtual也可以不写
virtual func(…) const = 0;
//确保派生类可以拜访数据成员,有必要设置为protected
protected:
//一些数据成员界说
…
};
笼统类的效果首要是协助完结实践派生类的规划,为什么这么说呢?假如咱们只创立一个基类,直接承继基类创立实践的派生类,存在许多的问题,为什么这么说呢?比如说我要创立一个人的类,咱们每一个人都是一个人的目标,在人的基类中一般仅仅包含了人的共性,不或许将某一个人的特别界说到类中,当然为了承继,必定也会创立一系列的虚函数。假如咱们每一个人都直接从该基类派生,人的个别在世界上有60多亿,咱们每一个人实践上便是一个派生类,由于每一个人都不同,都有自己共同的特性(假设是一种数据目标),假如要完结这么多的派生类真的是一个不行幻想的,并且咱们可以知道许多人(类)实践上存在许多的相似性。
这时咱们实践上就可以选用笼统类来帮助完结咱们的规划。笼统类是连接在基类和实践派生类之间的中心类,实践派生类的直接基类是笼统类,也就说说基类是实践派生类的直接基类。在笼统层中首要完结什么操作呢?笼统层中首要完结对派生类共性数据成员的界说,为了便利派生类的数据拜访,有必要设置为受维护拜访权限,创立纯虚函数,界说结构函数,应该在初始化列表中首要创立基类目标,然后才干完结其他成员的初始化,有时候或许需求仿制操控函数的完结。
在实践的派生类规划进程中就不再直接从基类承继,而是从笼统类中承继,由于笼统类中添加了一些受维护成员数据,且这些数据成员时派生类的共性,因而派生类中可以很便利的拜访。一起在该派生类中就应该完结虚函数的复写操作,由于动态绑定今后会直接调用该版别的虚函数。当然有时候也要完结仿制操控函数的界说。当然可以规划许多根据笼统类的派生类。当然在派生类中也可以添加自己的数据成员。
//实践派生类从笼统类中承继
class ActualClass : public AbstructClass
{
public:
ActualClass(…):AbstructClass(…),…{}
//派生类中复写虚函数
func()
{…}
private:
//派生类的一些数据
…
};
根本的思维如下图所示:
从上面的图可知,咱们可以在实践的派生类与基类之间添加一个中心层,这种完结办法不只可以更好的躲藏数据,并且比较好的处理了咱们上面说到的派生类过完结过于杂乱的问题。因而咱们可以以为笼统类实践上便是一个分层规划的办法,也可以以为是一个分红愈加精密子类的办法办法,也便是说在基类的根底大将目标分红许多子类(笼统类),然后在各个子类下规划新的派生类。比如在图中的笼统类1,笼统类2是不同的,是两种不同的分类,这候咱们给予两个笼统类的派生类当然也就存在了不同。这样完结的优点可以防止许多的重复代码。