类与对象基础(C++)(一)

一、面向对象编程

1.过程性编程和面向对象编程

C语言是面向过程编程,回想一下C语言编程的过程:主函数,定义变量,调用函数然后实现。面向过程编程是一种非常具体,要面面俱到的的编程方式。而面向对象是以对象为单位来进行编程,比较像正常人的思维。

2.面向过程和面向对象的本质理解
面向过程是具体化的,流程化的。解决一个问题,需要一步一步分析需要怎样,然后需要怎样,一步一步实现的。面向对象是模型化的,抽象出一个类,这是一个封闭的环境,在这个环境中有数据有解决问题的方法,你如果需要什么功能直接使用就可以了,至于是怎么实现的,你不用知道。

从代码层面来看,面向对象和面向过程的主要区别就是数据是单独存储还是与操作存储在一起。在类的里边,实现具体的功能还是需要流程化、具体化的代码去实现的,在类里还是需要具体的算法来实现的。总结来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象。

3.面向过程与面向对象的优缺点
(1)面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
(2)面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性, 可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低

二、如何理解OOP呢?

面向对象语言的四大特征是 抽象、封装和数据隐藏、继承、多态( 三大特征:封装和数据隐藏 继承 多态

1.抽象

数据抽象是指只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。
数据抽象是一种依赖于接口和实现分离的编程(设计)技术。
简单来说,抽象性是指程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。

2.封装和隐藏

封装也叫做信息封装,指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的模块来说,是不能访问的。
数据隐藏:防止程序直接访问数据被称为数据隐藏,数据隐藏不仅可以防止直接访问数据,还让开发者(类的用户)无需了解数据是如何被表示的。

3.继承

如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类"。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。另外,为子类追加新的属性和方法也是常见的做法。

4.多态

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象

三、类

1.什么是类?
(1)类是面向对象程序设计中的概念,是面向对象编程的基础。
(2)类是对现实生活中一类具有共同特征的事物的抽象。类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作类是实体类型的一个抽象描述,类是不占内存的,类实例化出一个对象,对象对应实体,对象是占内存的
(3)类的内部封装了方法(即成员方法,又称成员函数),用于操作自身的成员。类是对某种对象的定义,具有行为(Behavior),它描述一个对象能够做什么以及做的方法(Method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、方法、属性和事件。
(4)类的构成包括数据成员和成员函数。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作。比如“人”可以“开汽车”,而"飞鸟"不可以。
(5)类和外界发生交互的操作称为接口
(6)类通过**访问限定符(public private protected)**来体现OOP的封装思想,成员方法的定义有两个地方:类里边直接定义、在类外定义。
(7)计算对象内存占用大小的时候,只计算对象的成员变量, 不包括对象的成员方法,一个类定义的很多对象,它们都有自己的一份成员变量,但是它们共享方法,在 .text段存储。

四、类的三大特性

1.封装性

将数据和操作封装为一个有机的整体,由于类中私有成员都是隐藏的,只向外部提供有限的接口,所以能够保证内部的高内聚性和与外部的低耦合性。用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,能够增强安全性和简化编程。

2.继承性

继承性更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。

3.多态性

同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

五、类与结构体的区别是什么呢?

1.类是C++中面向对象独有的,但是C和C++中都有结构体。

2.C和C++中结构体的区别
(1)C结构体中不能包含函数,C++结构体仍然可以定义类,允许有内部成员函数。
(2)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的,和类一样,实现了代码的复用。
(3)访问权限:C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。
(4)C定义结构体变量时需要加struct关键字,C++中定义结构体变量时可以不加struct关键字。
(5)gcc下分别用C和C++定义空结构体,sizeof() 后的结果分别为0 和 1,vs下C 要求一个结构或联合至少有一个成员。一个类能够实例化,编译器就需给它分配内存空间,来指示类对象的地址。这里编译器默认分配了一个字节(如:char),以便标记可能初始化的类对象,同时使空类占用的空间也最少(即1字节)。

3.C++中结构体和类的区别
主要是访问权限的区别:
(1)C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。
(2)C++结构体的继承默认是public,而c++类的继承默认是private。

六、类的构造函数和析构函数(划重点了。。)

1.构造函数
(1)类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

(2)构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。

(3)一个类可以有多个构造函数,即类的构造函数可以重载,通过不同的形参列表来区分。

(4)构造函数分为以下几类:默认构造函数、带参构造函数、拷贝构造函数、赋值构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值