C++学习——程序、对象、类
一、程序1、面向过程的编程程序构成的基础是“算法数据”而面向过程的编程思维是自上而下的将要做的整个项目归纳成一个个步骤然后一步一步的去完成它这样对于小的项目或许问题不大但对于一个庞大的项目而言如果要增加需求和bug修复那是难以想象的工作量基于这种问题面向对象的编程思想应运而生。2、面向对象的编程面向对象的编程理念是将一个个过程抽象成对象整个系统将变成对象对象对象……消息传递显然这种情况下如果要增加需求和修改需求只需要对个别对象好消息处理部分做出一定的改变所以为了增强项目的可迭代性面向编程是必须要使用和理解的。二、面向对象编程详解1、抽象抽象就是将现实中的对象通过数学和逻辑学的手段将其转变为程序中的对象类其本质是将现实和计算机联系起来的一种手段。每一个对象都由“算法数据”构成也可以理解成由“属性行为”。2、封装封装一方面是将每一个对象中的某些数据变为外部可见的“属性”这些属性通常要具备“可读”、“可写”功能而另一些数据只服务于此对象内部外部并不可见另一方是将对象中的一部分算法变为外部可以调用甚至修改的“行为”而另一些算法只服务于此对象内部外部不可见。比如一个汽车可以控制油门大小这就是一种“属性”但是你不能直接去修改发动机内部的喷油量你可以让汽车前进、后退等这就是“行为”但你不能直接去让发动机正转或者反转。个人认为封装就是将对象的一部分数据和算法保护起来不能被使用者修改以此防止一些bug和算法安全性。3、继承继承就是将封装好地对象的属性、行为和某些不可见地算法、数据给一个新的对象通常是由一般到特殊的过程当然可以继承多个对象。比如轮子、车架、发动机都是一个个对象如果要生成一个小汽车对象那必须得继承以上这些类然后通过设置这些类的一些属性再次封装。个人理解本质是一些底层的开发人员开发出“螺丝”、“螺丝刀”、“钢铁”等这些对象针对不同的使用场景再将其继承到一些其他对象中形成“车架”、“发动机”、“轮子”等然后再向上继承和现实世界一样最后就有各种各样的对象了。4、多态它的本质是某一个对象发出了一个消息这个消息传递给不同的对象就会产生不同行为的过程就叫做多态。比如你发出了画画这个消息这个消息被矩形绘画器接收到那画出来的就是矩形如果被圆接收器收到那就只能画出圆。三、类类本质是由现实中的事物对象抽象成的可以让计算机通过“数据算法”复现的一个代码体通常应当具有“属性行为”。1、基础结构在c中通过头文件.h源文件.cpp一起构成的其中左边为头文件右边为源文件头文件中第1、2、15是为了防止重名建议每一个类一定要写其中用“ class名称{}”声明一个类其中“private”为私有仅类内、友元可见、“public”为公有全局可见、“protected”为半私有仅类内、继承、友元可见。显而易见类内就是通过这种限制可见来保护数据的。其中源文件就是对类中算法的具体实现可以这么理解头文件通常是放类框架的源文件是放算法实现的。注其中“const”表示的是常量的意思意味着只能访问但不能改变。在c中定义常量会总用。2、内部结构内联成员函数在类的头文件里直接用{}给出实现的函数一般要求短小或者用“inline”在源文件中声明。它会在编译时直接插入代码到调用位置可以说是用内存换取效率。成员函数重载及其缺省参数可以定义多个同名函数然后根据输入不同的参数数量就会调用不同的函数。类与结构体类默认是私有的而结构体默认为公有的其余都一样。隐含的this指针它是编译器为每一个非静态成员自动添加的隐含参数指向调用该函数的那个对象。因为一个类可以声明多个对象而每个对象都会去调用类中的方法这是为了区分对象那个是那个。3、类的用法类的作用域在{}内声明的内容若没有标志符那只在大括号内可见用完之后通常会被自动销毁。前向声明假如两个类相互嵌套使用那就要进行前向声明在头文件中声明一下这个类但是前向声明不能创建对象只能创建指针、引用。嵌套类在一个类中声明另外一个类默认为私有若外部要访问必须用外部类的控制符控制。局部类局部类定义在函数体内部仅作用域此函数外部不能访问它但是函数内部不能包含静态变量、不能声明友元可以访全局动态、静态变量和。