C++编程实践—常见的对象种类
一、面向对象面向对象编程是软件工程范式的一种重大演进虽然在现在已经是一种普遍的开发方式但在当初可是开发思想的巨变。面向对象重点是从思想角度把开发从整体迁移到了对象上即以对象为基础进行整个编程体系的构造。二、C中的对象既然是以对象为基础什么是对象就必须搞明白。如果光从教科书的定义上来看对象非常好理解很多人可能冲口而出就是类的实例么。没错但是如何更宽泛的定义呢可以这样理解对象是抽象的具体。回头再来看刚刚的回答类就是抽象对象就是抽象的一个具体实例。如果从物理意义上定义对象它其实就是内存中一块数据集合的统称它包含有一系列的函数、属性等可操作的方法。对象一般包含几个特征状态对象的属性内容方法对象的可操作性和ID对象的地址标志。它们三个一起组成了对象的基本的内容。三、分析如果单纯从理论上分析对象并没有什么可细读的东西。但从抽象到具体总需要有一个例子来说明会更容易理解。比如讲驾驶的各种方法和技巧最终还是要让学员亲自上车实践一把更容易理解什么是加油门什么是刹车。下面就针对C中常见的具体对象实例进行分析说明基础类型对象这个更好理解就是常见基础类型如int等定义成的相关对象。这个其它语言中更容易理解。在一些跨平台的兼容性中也经常看到这种定义inta0;std::int32_tb0;数组容器对象这也是一种很普遍的对象把一个数组或一个盛纳相同数据类型的容器定义的实例称为对象intarr[10];std::vectorintvec;结构体对象C中的结构体对象是从C语言继承下来的和C语言有着不少细节的不同特别是在定义和使用时。在C编程中如果在仅使用纯数据操作时一般建议还是定义结构体对象来使用structDemo{inti10;doubled11.0};Demo d;普通类对象这是最经典的对象写C不会写类那还能叫C开发用类就必须会有实例。这就是类对象。这里指出是普通类对象目的就是为了和其它对象的区别从严格意义上来讲它们都可以说是类对象class Data{public:Data(){};~Data(){};public:voiddisplay(intd){std::coutsum:dd_std::endl;}private:intd_0;};Data d;函数对象这里是严格的函数对象范围否则后面两个也可以划到此范围内。所谓函数对象就是将函数定义为对象的一种方法。它包括普通的函数指针对象也包括在STL中预定义的很多标准函数对象如std::function()运算符对象等等autosubstd::bind(std::minusint(),std::placeholders::_1,std::placeholders::_2);std::functionint(int,int)mulstd::multipliesint();这里需要说明的是std::function配合std::bind可以实现非常强大的功能但其也明显有些重所以在使用时要认真对待Lambda表达式对象Lambda表达式是C11引入的一种匿名函数对象处理的机制,其后又引入了模板泛型Lambda等。它让开发者可以更方便灵活的定义函数对象而不用使用传统的定义声明的机制autofunc[](intd){returnd;};仿函数对象这其实是一种自定义运算符operator()的机制它的优势在于可以根据需求灵活扩展相关的运算符的应用场景。对于普通函数来说仿函数的优势是在于其内部可以进行状态的控制。从实现来讲仿函数是Lambda实现的基础class Sum{private:intnum0;public:intoperator()(){returnnum;}};当然从不同的角度来看对象可能也有不同的定义方式。比如从生命周期、值类型种类等等。不过从上面的角度来看更容易为初学者理解和掌握。四、总结人们对于身旁的一些熟悉的事物往往能够更容易理解从抽象到具体的过程。但一些无法容易物化的具体实例往往不容易理解。这其实就需要更善于“借物比喻”来描述抽象的存在。这一点老子和庄子就非常擅长。其实从类与对象的抽象与具体来看难于理解的不是常见的普通类对象等而是一些特殊的如bindlambda等情况。特别是仿函数看着简单用起来很有可能一忽悠就糊涂了。