面向对象编程 (OOP):您需要知道的一切

面向对象编程 (OOP):您需要知道的一切

面向对象编程(OOP),编程中最有趣的话题之一,它有很多优势 程序化编程。 我们还将讨论 OOP 中的一些重要方法,它们是 封装、继承、多态、抽象。 在本系列学习中,我们将主要使用 C++ 来更好地理解。但是同样的概念也适用于其他面向对象的语言。

班级

类可以定义为原型、想法、模板或蓝图 目的 .类是 ** “建筑模块”** 面向对象编程 (OOP)。该类拥有自己的 数据成员成员函数 ,可以通过创建该类的实例来访问和使用。声明类时,不分配内存。

数据成员: 类定义中的变量
成员函数: 类内部的函数定义或存在于类外部但属于该类的函数定义

可以使用关键字定义类, “班级”, 其次是 班级名称 .一个类在程序中只能定义一次,即每个类都应该有 唯一的类名 .您不能在一个程序中多次定义一个类。

 班级学生{  
 // 访问说明符  
 // 数据成员  
 // 成员函数  
 };

目的

一个对象是 类的实例。 只有在对象初始化之后才会创建内存,直到没有分配内存。对象是那些具有 状态和行为。 这里, 状态 方法 数据行为 方法 功能性 .

可以为一个类创建“n”个对象。对象可以通过使用 类名后跟对象名。

 学生a// 为Student类创建一个对象'a'

构造函数

构造函数基本上是一个在为类创建对象时自动调用的函数。构造函数就像一个 默认 如果我们访问该类将执行的函数。

构造函数的函数名与 班级名称 .将有 没有返回值 在构造函数中,因此 无返回类型 .构造函数大多在 “上市” 类的部分。

 班级学生{  
 上市:  
 学生(){  
         cout << "输入卷号:";  
 cin >> rno;  
 cout << "请输入姓名:";  
 cin >> 名称;  
 }  
 }

在这里,如果 班级学生 被访问,然后构造函数被自动调用并执行。

即使我们不声明构造函数,编译器也会在创建特定类的对象时自动创建构造函数。

构造函数分为三种类型:
1. 默认
2.参数化(带参数的构造函数)
3.复制构造函数

析构函数

析构函数,调用时会 ** 销毁构造函数。** 它在函数结束、程序结束、包含局部变量的块结束或调用删除运算符时执行。

析构函数也与前面的类同名 波浪号 ** (~)** 象征。析构函数也没有 返回类型论据。

 班级学生{  
 上市:  
 Student(){ //构造函数  
         cout << "输入卷号:";  
 cin >> rno;  
 cout << "请输入姓名:";  
 cin >> 名称;  
 }  
 〜学生(); //析构函数  
 }

如果类中没有编写自己的析构函数,编译器会为我们创建一个默认析构函数。当一个类包含指向在类中分配的内存的指针时,我们应该在类实例被销毁之前编写一个析构函数来释放内存。

访问说明符

访问修饰符(或访问说明符)是面向对象语言中的关键字,用于设置类、方法和其他成员的可访问性。

在上面的构造函数和析构函数示例代码中,希望你注意到有一个叫做“public”的东西。他们叫 访问说明符。 这些访问说明符用于确定变量的范围,即在类中声明的变量是否可以在任何地方、派生类中访问或不能在任何地方访问。

访问说明符是:
1.公开
2.私人
3. 受保护

上市

在此“公共”访问说明符下声明的变量或函数可以是 随时随地访问 在程序中,即可以访问 课外 .

 班级学生{  
 上市:  
 int roll_no;  
 } 诠释主要(){  
 学生甲;  
 cout >> A.roll_no; //有效的  
 返回0;  
 }

受保护

可以访问“受保护”访问说明符下的变量 类以及派生类中 但不能在课堂外访问。

 班级学生{  
 受保护:  
 int roll_no;  
 } 类 Child_student :公共学生{  
 上市:  
 int new_rollno = roll_no + 1; //可以访问受保护的  
 从这个派生的roll_no  
 班级  
 } 诠释主要(){  
 学生甲;  
 cout >> A.roll_no; //无效的  
 返回0;  
 }

私人的

私有变量 不能在同一类之外的任何地方访问。

 班级学生{  
 私人的:  
 int roll_no;  
 } 类 Child_student :公共学生{  
 上市:  
 int new_rollno = roll_no + 1; //无效的  
 } 诠释主要(){  
 学生甲;  
 cout >> A.roll_no; //无效的  
 返回0;  
 }

Photo by 胡安乔·哈拉米洛 on 不飞溅

封装

隐藏用户访问的“敏感数据”的过程称为 封装。 为此,应将数据成员声明为 私人的。 如果您想允许用户修改或访问这些数据成员,那么您可以通过提供 公共吸气剂设置方法。

 类员工{  
 私人的:  
 国际工资; // 私有数据成员 上市:  
 //二传手  
 无效 setSalary(int s) {  
 工资 = s;  
 }  
 //吸气剂  
 {  
 int getSalary() {  
 返还工资;  
 }  
 }; int main() {  
 员工 myObj;  
 myObj.setSalary(50000);  
 cout << myObj.getSalary();  
 返回0;  
 }

在上面的代码中,我们可以设置 薪水 通过setter方法到50000。然后,我们可以打印工资值 吸气剂功能。 所以,这里的目标是我们可以通过使用一些公共函数来访问一个类中的私有数据成员。

吸气剂

基本上,getter 是一个用于获取值并将其显示给用户的函数。

二传手

Setter 是一个函数,用于为在类中声明为私有的变量分配或设置值。

遗产

继承是类的能力 派生另一个类的属性和特征 .

从基类继承类的语法是,

 类 subclass_name : access_mode base_class_name  
 [  
 //子类的主体  
 }

子类

从另一个类继承属性的类

超级班

其属性被子类继承的类

 //基类或父类  
 类车辆{  
 上市:  
 字符串品牌=“福特”;  
 无效显示(){  
 cout <<品牌;  
 }  
 }; //派生类或子类  
 类汽车:公共车辆{  
 上市:  
 字符串模型=“野马”;  
 }  
 }; int main() {  
 汽车我的汽车; // 对象 myCar 是为 Car 类创建的  
 myCar.显示;  
 cout << myCar.brand + " " + myCar.model;  
 返回0;  
 }

在上面的代码中,虽然我们没有声明字符串 在子类 Car 中,我们可以访问属性 来自它的基类,因为它是在子类中继承的。

继承方式

上市

如果您从 上市 基类,然后 公共属性 在基类中将变为 上市受保护的属性 在基类中将变为 受保护。

受保护

如果子类派生自 受保护 基类,然后 公共和受保护的属性 会变成 受保护 在子类中。

私人的

如果子类派生自 私人的 基类,然后 公共和受保护的属性 会变成 私人的 在子类中。

继承类型

单一继承

单继承,就是从一个基类派生一个子类。

多重继承

多重继承,是派生的属性 不止一类 到一个子类。

多级继承

这种类型的继承是通过继承派生类或子类的属性来完成的。

Multi-level inheritance

在上图中,我们可以清楚地了解到 Class C 是从一个继承的 Class B 派生而来的。因此,C 类也可以访问 A 类的属性和属性,因为 B 类继承了 B 类的属性。

层次继承

在这种类型的继承中,不止一个子类是从一个基类继承而来的。

Hierarchial inheritance

混合继承

混合继承基本上是实现了不止一种类型的继承。例如:在下图中,实现了 Hierarchial 和 Multiple 继承。

Hybrid inheritance

多态性

多态性,意味着 “多种形式” ,并且当有许多通过继承相互关联的类时会发生这种情况。也就是说,它允许以不同的方式使用单个操作。

所以,这就是“面向对象编程”的全部内容。我几乎涵盖了 OOP 的基础知识。虽然我已经使用 C++ 来作为示例和代码片段,但同样适用于其他 面向对象的语言。

快乐学习!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/37538/11441810

posted @   哈哈哈来了啊啊啊  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示