码迷,mamicode.com
首页 > 编程语言 > 详细

深度探索C++对象模型之第一章:关于对象之对象的差异

时间:2019-08-15 20:54:05      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:string   面向对象模型   dia   封装   book   ide   public   ==   面向对象   

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();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

深度探索C++对象模型之第一章:关于对象之对象的差异

标签:string   面向对象模型   dia   封装   book   ide   public   ==   面向对象   

原文地址:https://www.cnblogs.com/ccpang/p/11360305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!