C++程序设计模型支持三种程序设计范式(programming paradiams).
- 程序模型(procedural model)
char boy[] = "ccpang"; char *p_son; p_son = new char[strlen(boy) +1 ]; strcpy(p_son,boy); if(!strcmp(p_son,boy)) take_to_disneyland(boy);
- 抽象数据模型(abstract data type model)
此模型的抽象是和一组表达式(public接口)一起提供,那时其运算定义仍然隐而未明的。
1 String girl = "Anna" 2 String daughter; 3 4 //String ::operator(); 5 daughter = girl; 6 7 //String::operator == (); 8 if(girl ==daughter) 9 take_to_disneyland(girl);
- 面向对象模型(object-orlented model)
此模型中有一些彼此相关的类型,通过一个抽象的基类(用以提供共同接口)被封装起来。Library_materials class就是一个例子,真正的子类例如Book、Video、等均可以从那里派生而来。
1 void check_in (Library_materials *pmat) 2 { 3 if(pmat ->late()) 4 pmat->fine(); 5 pmat->check_in(); 6 7 if(Lender *plend = pmat->reserved()) 8 pmat->notify(plend); 9 }
只以一种程序设计范式写代码,有助于整体行为的良好稳固。如果混合了不同的范式,就可能会带来让人吃惊的后果。常出现的问题如下所示:
以一个基类的具体实例来完成某种多态(polymorphism)情况是时:
1 Library_materials thing1; 2 3 //class Book : public Library_materials{....}; 4 Book book; 5 6 //thing1不是一个book,book被裁减了(sliced) 7 thing1 = book; 8 9 //调用的是Library_materials::check_in() 10 thing1.check_in(); 11 12 //通过基类的指针或引用来完成多态局面: 13 Library_materials &thing2 = book; 14 15 //现在使用的是Book::check_in() 16 thing2.check_in();
原文地址:https://www.cnblogs.com/ccpang/p/11360305.html
时间: 2024-11-13 08:52:33