【②C++ | 类和对象】四大特性 | 创建 | 实例化

在这里插入图片描述

前言

✨欢迎来到小KC++专栏,本节将为大家带来C++类和对象的四大特性 | 创建 | 实例化的分享


1、概念

面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

面向对象是相对于面向过程来讲的,面向对象方法把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

  • 面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
  • 面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。

2、类和对象

在这里插入图片描述

什么是类?

类,即类别:类是具有相似属性和行为的一组实例集合

在这里插入图片描述

什么是对象?

在生活中,像张三,李四,王五,这样真真正正存在人的实体,我们称这些实体为对象。

在计算机中,类的实例就是对象。

3、四大特性

面向对象主要有四大特征:抽象、封装、继承、多态。

A、抽象(abstract)

抽象是将类对象的共同特征总结、提取出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象的哪些属性和行为,并不关注这此行为的细节是什么。

属性抽象 -->表示世界中一类事物的特征,就是对象的属性。比如鸟有翅膀,羽毛等(类的属性)

行为抽象 -->表示世界中一类事物的行为,就是对象的行为。比如鸟会飞,会叫(类的方法)

B、封装(encapsulation )

通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象,可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。封装给对象提供了隐藏内部特性和行为的能力,对象提供一些能这被其它对象访问的方法来改变它内部的数据。

封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。

C、继承(inheritance)

继承是从已有类得到继承信息创建新类的过程,继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。子类继承父类属性(静态特征)和方法(动态特征),继承必须遵循封装当中的控制访问

D、多态(Polymorhism)

多态是指允许不同类的对象对同一消息做出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题。总的来说,方法的重写,重载与动态链接构成多态性。

动态链接 -->对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接。

4、类的创建和对象的实例化

类的创建和C语言中的结构体类似,只不过关键变成了class,当然其实也是可以使用struct的。

类中除了可以定义成员变量(属性)之外,还可以定义成员函数(方法),类还可以设置访问权限,可以控制类中的成员在何处能访问。

三个访问权限限定符:用来设置成员变量和成员函数的访问属性。

  • public:公有成员,它们允许被本类或其它类的成员函数(通过对象)访问或调用,是类的外部接口,成员函数一般定义为public属性;
  • private:私有成员,它们只允许被本类的成员函数访问,数据成员一般定义为private属性;
  • protected:保护成员,它们允许被本类的成员函数和派生类的成员函数访问或调用。

示例

在这里插入图片描述

class和struct的区别

前面说道class也是可以用struct替代的,那么他们两个之间有什么区别吗?

区别只有一个:struct定义的类属性是默认公有的,而calss定义的类属性是私有的,其他的没有区别

在这里插入图片描述

5、类的定义和成员函数定义分离

一般将类的定义放在头文件(.h) 中,类的实现放在源文件(.cpp) 中,而main主函数可以放在另一个源文件中。

何谓分离?即把函数的定义放在类的外部实现!

成员函数的定义方式与其他函数的定义方式基本相同,但必须在成员函数名前面加上类名和作用域限定符(简称域运算符)

在这里插入图片描述

6、例题

编写C++程序完成以下功能:
1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法。
2)定义一个圆形类,其属性包括圆心和半径。
3)创建两个圆形对象,提示用户输入圆心坐标和半径,判断两个圆是否相交,并输出结果。

#include<iostream>
using namespace std;
class Point {
public:
	Point(int x=0,int y=0):_x(x),_y(y){}
	float towPointDistance(const Point& other) {
		return sqrt(pow(_x - other._x, 2) + pow(_y - other._y, 2));
	}
private:
	int _x, _y;
};
class Circle {
public:
	Circle():_radius(0){}
	Circle(int x,int y,int r):_center(x,y),_radius(r){}
	bool intersect(const Circle& other) {
		return _center.towPointDistance(other._center) < _radius + other._radius;
	}
public:
	Point _center;
	int _radius;
};


int main() {
	Point p1(2, 3), p2(5, 5);
	cout << p1.towPointDistance(p2) << endl;
	Circle r1(5, 5, 2), r2(6, 6, 3);
	cout << boolalpha<<r1.intersect(r2) << endl;
	return 0;
}

总结

通过使用类和对象,可以将代码组织为更加模块化、可重用和易于维护的方式。类定义了对象的属性和行为,而对象则是这些属性和行为的实际体现。封装、继承和多态等概念使得面向对象编程成为一种强大的编程范式,可用于构建复杂的软件系统。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaok-cpp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值