从面向过程到面向对象

这篇具有很好参考价值的文章主要介绍了从面向过程到面向对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、抽象

2、UML类图

3、类定义

4、类成员函数

(1)构造函数(constructor)

(2)析构函数(destructor)

5、对象实现

6、封装

7、getter、setter方法


为什么要从面向过程转到面向对象?

从面向过程到面向对象

随着计算机发展,问题场景越来越复杂,我们很难再描述每一个可能的过程

转而描述每一个实体(属性+行为),这就是面向对象的核心思想

1、抽象

识别出各个实体及其属性和行为,类就是对某一事物的抽象

下面以游戏为例来说明

从面向过程到面向对象

从面向过程到面向对象

属性:ID,段位,英雄,战力,场次...

行为:移动,放技能,普攻,回城,吃血包...

从面向过程到面向对象

属性:名称,伤害,效果,价格,数量...

行为:购买,出售,合成...

OK,至此我们清楚了什么是抽象,以及区分类的属性和行为。

2、UML类图

用来规范描述一个事物的属性和行为

以上面的 “泣血之刃” 为例

从面向过程到面向对象

 

数据成员属性后需要加上数据类型

属性、行为前的 + 和 -

+表示为public //公有成员

-表示为private //私有成员

3、类定义

定义一个类的成员变量和成员函数(语句同样以 ; 结尾)

类通过实例化成为真实存在的对象(存在于内存中)

我们使用关键字class来进行类定义

4、类成员函数

(1)构造函数(constructor)

对象实例化时,在分配的空间上构造对象,目的就是初始化对象

① 创建对象时自动调用

② 有默认的构造函数,并不是必须定义

③ 默认构造函数是无参的,也可以定义有参的

④ 可以有多个重载

⑤ 不可以有返回值

(2)析构函数(destructor)

对象生命期结束时,回收空间前,完成对象清理工作

① 一定无参数

② 不可以有返回值

③ 函数前有~(算是一个标志)

此外,构造函数和析构函数的函数名都必须和类名相同

5、对象实现

#include <iostream>
using namespace std;

class Circle {
public:
	float radius; //这里的radius是类的数据成员
	Circle(float radius)  //有参构造,括号里的radius为形式参数
	{
		this->radius = radius;  //this指针在类定义内部使用,指向当前对象
    }
float getS() {
	return 3.14 * radius* radius;
    }
};

int main()
{
	Circle Circle1(1.2); //实例化对象,一个圆的半径为1.2
	cout << Circle1.getS(); //访问对象成员,调用求面积的函数并输出结果
}

从面向过程到面向对象

 

 

6、封装

将类的一些成员变量或方法藏起来,不允许外界直接操作(控制类成员在外部的可见性)

访问控制属性:

public:外部可通过 对象.名字 访问

protected

private:外部不可直接通过 对象.名字 访问

7、getter、setter方法

为某些私有成员提供外部读写方法,一般都是public

getter函数格式:

类型 get_XXX() const{

return XXX;

}

(通常设置为const函数,无参且有返回值)

setter函数格式:

void set_XXX(){

this->XXX=XXX;

}

(通常接受const参数,有参且无返回值)

来看例子,代码有点长,各位好好理解

#include <iostream>
using namespace std;

class Book {
private:
	string name;
	int count;
public:
	Book(string name) {
		count = 0;
		this->name = name;
	}
	int get_count() const {
		return count;
	}
	string get_name() const {
		return name;
	}
	void set_count(int count) {
		if (count < 0) {
			count = 0;
		}
		this->count = count;
	}
	void set_name(const string& name) {
		this->name = name;
	}
	void add_count() {
		count++;
	}
};
int main() {
 Book book1("高等数学");
		cout << book1.get_name() << "库存: " << book1.get_count() << endl;
		book1.add_count();
		cout << book1.get_name() << "库存: " << book1.get_count() << endl;
	}

从面向过程到面向对象

8、this指针

在类成员函数定义内部使用,指向当前对象

利用this指针编写Student的有参构造函数,避免变量名覆盖问题:

Student(int id,string name,int age,float score){
this->id = id;  //由于形参名把数据成员名覆盖掉了,所以用this指针表明当前对象的数据成员
this->name = name;  
this->age = age;
this->score = score;
}

也可使用其他方式避免同名覆盖,如下 

Student(int _id, string _name, int_age, float _score){
id = _id;
name =_name;
age = _age;
score = score;
}

 这样就可以不用this指针

OK,今天内容到此为止,你学废了吗?文章来源地址https://www.toymoban.com/news/detail-435742.html

到了这里,关于从面向过程到面向对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 面向对象(一)(成员方法、类和对象)

    学校开学,要求学生填写自己的基础信息,一人发一张白纸,让学生自己填 改为登记表,打印出来让学生自行填写: 在程序中简单使用变量来记录学生信息  使用变量记录数据太乱了。 如果程序中也和生活中一样 可以设计表格 可以将设计的表格打印出来 可以将打印好的表

    2024年02月15日
    浏览(46)
  • day 31 面向对象 成员方法

     class 类名称:                                   类的属类(定义在类中的变量,成员变量)            类的行为(定义在类中的函数,成员方法)  def  方法名(self,参数...... ):         方法体 self是成员方法定义必须写的,用来表示对象自身的意思,当

    2024年02月10日
    浏览(35)
  • 面向对象——多态、抽象类、接口

    学习资料来自:黑马程序员,内容仅为学习记录,侵删 多态 多态:事务存在的多种形态 多态的前提:1、有继承关系;2、重写父类方法;3、父类引用指向子类对象 面向对象 面向对象多态中成员访问特点 1.成员方法(动态绑定):编译看左边(父类),运行看右边(子类)

    2024年02月08日
    浏览(84)
  • 02 面向对象( 继承,抽象类)

    强调:一定用自己的话总结,避免抄文档,否则视为作业未完成。 this的作用 为了解决成员变量和局部变量所存在的二义性,适用于有参构造时使用 示例 为成员变量设置值, 构造器和setter方法的选择,为什么? 构造器:在知道具体的参数的时候可以使用,可以创建对象并做

    2024年02月06日
    浏览(48)
  • 【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

    在下面的 Python 类 Student 中 , 定义了私有的成员变量 , 该私有成员变量 , 只能在类内部进行访问 , 类的外部无法进行访问 ; 在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ; 使用 实例对象 访问 类的私有成员 , 编译时不会报错 , 但是运行时会报错 最后一行代

    2024年02月13日
    浏览(48)
  • 面向对象【成员变量与局部变量、方法声明与作用】

    Java中的成员变量是指 类中声明的变量 ,也称为实例变量或属性。它们与方法一样属于类的成员,不同之处在于,它们存储在对象(堆)中而不是栈中,并且每个对象都有自己的一组值。 成员变量可以用来描述一个对象的状态,例如人的年龄、学生的姓名等。它们可以具有pub

    2024年02月10日
    浏览(59)
  • C++ 面向对象核心(继承、权限、多态、抽象类)

    继承(Inheritance)是面向对象编程中的一个重要概念,它允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和方法。继承是实现类之间的关系,通过继承,子类可以重用父类的代码,并且可以在此基础上添加新的功能或修改已有的功能。 在C++中,继承

    2024年02月08日
    浏览(45)
  • 第十单元 面向对象二:静态类与静态成员

    前言 我们天天都在使用 为什么Console 类 调用 方法不需要实例化而可以直接调用呢? 我们可以查看Console的源码发现Console类定义如下: 我们发现 Console 类 前面有个 static 修饰, 我们把 static 修饰的类 叫作 静态类 static的作用 static是静态的意思,可以修饰成员变

    2024年02月06日
    浏览(41)
  • Java面向对象之抽象类、类、接口分析参考

    Java 抽象类 抽象类不能实例化对象,所以抽象类必须被继承,才能被使用; Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口 1. 抽象方法: 用Abstract 声明抽象方法,只包含一个方法名,没有方法体。方法名后面直接跟一

    2024年02月10日
    浏览(42)
  • 【C++】面向对象编程(二)面向对象的编程思维:virtual虚拟调用、继承、protected成员、派生类与基类

    默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,需要在成员函数的声明前加上virtual: 虚函数的作用: 用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,会调用 真正指向对象的成员函数 ,而

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包