钱能C++程序设计教程13.ppt
《钱能C++程序设计教程13.ppt》由会员分享,可在线阅读,更多相关《钱能C++程序设计教程13.ppt(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计教程(第二版)第十三章 抽象类 Chapter 13 Abstract Class 清华大学出版社 钱 能4/8/20231第十三章内容1.抽象基类抽象基类(Abstract Base-Class)2.抽象类与具体类抽象类与具体类(Abstract&Concrete Classes)3.深度隔离的界面深度隔离的界面(Interface Which Deeply Parted)4.抽象类作界面抽象类作界面(Abstract Class As Interface)5.演绎概念设计演绎概念设计(Deducting Concept Design)6.系统扩展系统扩展(System Exte
2、nsion)7.手柄手柄(Handle)4/8/202321.抽象基类抽象基类(Abstract Base-Class)继承体系的多态问题:n继承体系反映的是事物的分层分类,它是倒树状,顶端是基类越顶端越抽象,越底端越具体n基类往往是一种概念表达,或者像Account类那样,仅仅提取了各个子类的共性,本身并不构成有意义的实体这种基类的成员都是为子类提供的特别是虚函数,不同的子类有不同的实现,于基类中的定义版本并无意义class Account /.public:virtual void withdrawal(double amount)return;/无意义 ;4/8/20233虚函数都是从基
3、类传播的,靠基类指针来掀动多态因而,为多态性之故,非得在基类设置虚函数不可:class A;/基类中无fn()成员class B:public Apublic:virtual void fn();class C:public Apublic:virtual void fn();void f(A*pa)pa-fn();/编译错void g()f(&B();f(&C();4/8/20234编译器的语法规定,如果一个函数被调用了,则该函数若只有声明而没有定义是万万不能的 class Apublic:virtual void fn();/无定义;class B:public Apublic:void
4、fn();class C:public Apublic:void fn();void f(A*pa)pa-fn();/链接错void g()f(&B();f(&C();4/8/20235纯虚函数纯虚函数 class Account/抽象类public:virtual void withdrawal(double amount)=0;Account a(“3”,30);/错:创建对象之故前提:不同的子类表现不同的行为多态,而基类并不产生对象只是摆设目的:为了安全性,将基类抽象化,仅用来继承,不准许产生对象手法:设置纯虚函数。即在基类虚函数声明后面加上”=0”,不须提供定义体,表明为抽象类任何抽象
5、类若有创建对象操作,则是非法的4/8/202362.抽象类与具体类抽象类与具体类(Abstract&Concrete Classes)运行下列程序:void g(Display*d)d-init();d-write();int main()g(&Monochrome();g(&SVGA();结果为:MonochromeColorAdapterclass Displaypublic:virtual void init()=0;virtual void write()=0;class Monochrome:public Display virtual void init()virtual void
6、 write()cout“Monochromen”;class ColorAdapter:public Displaypublic:virtual void write()cout“ColorAdaptern”;class SVGA:public ColorAdapterpublic:virtual void init();如果要解决的问题涉及单一的类对象,无须继承.如果涉及许多相关的类对象,则需建立一个具有多态的继承体系.也许该继承体系的基类只是用来继承,别无目的,但抽象基类却足以将问题中的概念描述清楚.4/8/202373.深度隔离的界面深度隔离的界面(Interface Which De
7、eply Parted)类定义头文件若有修改,将引起类的实现和类的应用程序重新编译.界面不变是指外界可以访问的公有成员不变,而不是类定义头文件不变.类的实现细节可能涉及私有成员的变更.例如:下列两个类界面相同,但类定义不同,头文件自然就不同了其类的实现也不会相同日期的年月日版日期的年月日版class Date int year,month,day;public:Date(const string&s);Date(int n=1);Date(int y,int m,int d);Date operator+(int n)const;Date&operator+=(int n);Date&oper
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 教程 13
限制150内