C++中的Object, Class & Instance
2007-03-24 13:55
513 查看
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)则更适合与这个层次的抽象。
以上是我对这几个基本概念的理解,请大家批评指教!
从其定义来看,对象是指一个能完成特定操作,具有特定属性的实体(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)则更适合与这个层次的抽象。
以上是我对这几个基本概念的理解,请大家批评指教!
相关文章推荐
- 面向对象程序设计-C++ Class & Object & Friend Function & Constructor & Destructor【第五次上课笔记】
- object is not an instance of declaring class&argument type mismatch
- ruby的class << self, 及其class_eval和instance_eval的区别
- Property xxx cannot be found in forward class object "XXXXX" 错误
- 项目启动后,访问报 object is not an instance of declaring class 错误
- HIbernate 3.2 java.lang.IllegalArgumentException: object is not an instance of declaring class
- class&object
- [问题与解决] java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
- In c++ access control works on per-class basis not on per-object basis.
- Unable to find a value for "dwmc" in object of class "java.lang.String" using operator "." (null
- Unable to find a value for "字段名" in object of class java.lang.String using operator "."
- C++编译错误"a storage class can only be specified for objects and functions"解决方法
- NET:Error Creating Control -"Object Reference Not Set To An Instance Of Object"
- object is not an instance of declaring class 反射异常
- Propert 'c' cannot be found in forward class object 'CALayer *错误解决
- Unable to cast COM object of type 'System.__ComObject' to class type 的解决办法
- object is not an instance of declaring class
- 刨根问底Objective-C Runtime(2)- Object & Class & Meta Class
- ruby的instance_eval和class_eval, self && current class
- 对象&类&元类(Object & Class & Meta Class)