如何理解类和对象
在学习C++语言时,会有类和对象这样的概念,哪样如何去用,去理解呢?
在学习C++语言时,会有类和对象这样的概念,哪样如何去用,去理解呢?
定义好类后,使用类时就要,定义对象(object)。定义对象实际就是要申请内存(当然这个是编译器要处理的事),程序员只要定义对象。可以定义3类基本的对象,普通对象、引用对象、指针对象。
根据实际需求来确定定义哪一类对象。实际定义对象经验如下:一般定义普通变量,如果自已要控制对象生命周期就定义指针对象,如果是在编写代码时希望用另一个名字控制已有对象,可以定义一个引用对象。
据说爱因斯坦曾提出过这样的建议:尽可能地让事情简单,但不要过于简单。在c++语言中相似的说法应该是:尽可能地使程序高效,但不要过于高效。
int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)
int max_size()const; //返回string对象中可存放的最大字符串的长度
int size()const; //返回当前字符串的大小
这取决于你到底想达到什么目的:
如果你想改变被传递的对象,那就按引用传递或者使用指针;例如 void f(X&); 或者 void f(X*);
如果你并不想改变被传递的对象,但该对象很大,那就按常量引用传递;例如 void f(const X&);
我们不需要这个:大多数情况下,泛型编程提供的静态类型安全机制是非常不错的替代品。其它情况可使用多继承(multiple inheritance)来解决。
不存在有用的通用类:纯粹的通用类本身不含任何语义。
“通用”类会怂恿人们对类型和接口的考虑粗枝大叶,从而导致多余的运行时检查。
正常情况下退出作用域时都会调用析构函数,不过有时也会有这种问题,先看下例子:
也就是说,有些人误以为 new 创建的对象会在函数的最后被析构。
基本上,只有当你希望一个对象能“生存”于其被创建的域之外时,才应该使用“ new”。如果这样,你就需要使用“delete”来析构该对象。例如:
跟C语言一样,C++ 也没有定义对象在内存中的存放形式,而仅仅定义了一些必须遵循的语义约束。因此,不同的编译器(BCB,VC)实现起来都有所不同。
有一本书中第二章有一个简短的解释。《The Annotated C++ Reference Manual》简称为 ARM,也有一些图形例子。
把函数放进结构是C++中的根本改变,并且这引起我们将结构作为新概念去思考。在C中,结构是数据的凝聚,它将数据捆绑在一起,使得我们可以将它们看作一个包。但这除了能使程序设计方便之外,别无其他好处。这些结构上的运算可以用在别处。然而将函数也放在这个包内,结构就变成了新的创造物,它既能描述属性(就像C中的struct能做的一样),又能描述行为,这就形成了对象的概念。对象是一个独立的有约束的实体,有自己的记忆和活动。
对象的设计不限于写程序的时期,它出现在一系列阶段。有这种观点很有好处,因为我们不再期望设计立刻尽善尽美,而是认识到,对对象做什么和它应当像什么的理解是随着时间的 推移而产生的。这个观点也适用于不同类型程序的设计。特殊类型程序的模式是通过一次又一 次地求解问题而形成的。同样,对象有自己的模式,通过理解、使用和重用而形成。 下面是描述,不是方法。它简直就是对象期望的设计出现时的观察结果。