随笔 - 6  文章 - 8  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

C++中,经常用到对象(Object)、类(Class)和实例(Instance)等概念,一直对这几个概念有些混淆,今天算是整理一下自己的思路,谈谈自己对这几个概念的看法吧;希望不当之处大家能够指出,也欢迎大家看看自己的看法。

从其定义来看,对象是指一个能完成特定操作,具有特定属性的实体(Component);类是具有相同属性对象的集合(Group of Objects)。实例则往往被理解为一个对象的具体化。

对象更多的是一个概念,在象SmallTalk这类纯粹的OO语言中,所有东西都是对象(MetaClass, Class, Instances);而类在不过是一个特殊的、能作为模板创建实例的对象。(一直想弄个SmallTalk来玩玩,但终究没有时间和精力去学习。)

C++中,“对象”概念往往被模糊化,它不是一个能包括一切的概念,而在某些环境下成为能和类与实例相互替换的概念。

原因之一,或许是在C++对类的定义。C++把类定义为一个抽象数据类型(ADT)。而ADT只是一个实现上的概念,它在运行时并不存在一个对象所应该具有的特征(属性和行为)。虽然C++中引入了运行时类型信息(RTTI,参看type_info类),但仍然很难把类当成一个对象。从这个角度来说,在实现时类可以看作是对象概念的代名词。

原因之二,个人觉得应该是和使用这些概念的上下文有关。在使用C++时(包括设计模式),往往需要考虑两个层次的抽象:
1. 编码(实现)时的抽象
2. 运行时的抽象

在实现时,C++中,无疑类的概念和对象的概念是一致的,而实例则可以理解为一个类的实例化或一个对象的具体化;对应与Design Pattern,那些结构化的模式(Structural Patterns)更适合与这一层次的抽象。

在运行时,个人觉得对象更多的是和实例等同的。我们说某个对象和另外一个对象交互更多的是在表达某个类的一个实例和另一个类的一个实例进行交互,这个时候,对象不再是一个概念,而是被具体化了。而设计模式中的行为模式(Behavioral Patterns)则更适合与这个层次的抽象。

以上是我对这几个基本概念的理解,请大家批评指教!
//bow

posted on 2007-03-22 10:34 Neal 阅读(6063) 评论(5)  编辑 收藏 引用

FeedBack:
# re: 我看C++中的Object, Class & Instance 2007-03-22 14:44 Corner Zhang
对象(Object)-- 平时口头上经常提到“基于对象的编程”,“面向对象的编程”,凡是要隐藏部分信息的那个概念,就是通常意义上的对象。

类(Class)-- 在C++中,这是指一些类型,它们有别于float, int, long...,从compiler的角度看,它是一族对象的母板,并且存在编译期

实例(Instance)-- 是个运行时的概念,拥有自身状态,具有生存期/拥有权性质的,寄身于memory的二进制表示。就因为这个原因,成为hacker整日追踪的目标。  回复  更多评论
  
# re: 我看C++中的Object, Class & Instance 2007-03-23 08:31 LOGOLS OFF
感觉你说的有点太school了
类就是类型,对象就是实例,实例就是对象。这就是我的理解了  回复  更多评论
  
# re: 我看C++中的Object, Class & Instance 2007-03-23 16:45 Neal
呵呵,谢谢大家
就是谈谈自己的感受和理解嘛。。。肯定有不对的地方,只是希望大家能和偶一起探讨探讨~ 要不天天coding有什么意思呢

C++和其它OO语言肯定有相同的地方,但更重要的是它不同的地方三,要不怎么会有这么多fans;D
  回复  更多评论
  
# re: 我看C++中的Object, Class & Instance 2007-03-28 20:05 Corner Zhang
@LOGOLS OFF
赫赫,当初我写下这回复,就觉得少不了具务实精神的回复!  回复  更多评论
  
# re: 我看C++中的Object, Class & Instance 2007-03-30 17:08 塌塌方
类就是一组数据及其能对它进行的操作的集合  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理