面向对象

面向对象

C语言面向过程,c++面向对象,对类和对象的使用

一、面向过程

1.知识点

C语言编程就是一个面向过程的编程。遵循一个“从上往下”的程序设计

2.用面向过程的方式解决问题的思路

1.提出问题,分析问题的处理流程,将大问题分解为多个小问题,如果小问题比较复杂,那就继续分解为更小的问题,然后解决这些一个一个的小问题来解决大问题,最后解决所有问题。

这个从问题出发,从上往下的解决过程,一步一步的解决问题,这种开发思路就被称为面向过程的设计思想,因为它主要是解决问题中的一个个的过程,比较符合我们解决问题的思路(做好这一步,再做下一步,直到做完所有步骤)

3.例如:要做一个飞机大战的小游戏

效果一个飞机由玩家控制,可以发射子弹,从屏幕的上方可以随机掉落10架敌机,玩家控制的飞机可以发射子弹,击毁掉落的敌机。

飞机怎么实现:

​ 在图形库窗口上面贴一个飞机的图片就是飞机了

飞机移动:

​ 改变飞机的x,y坐标的值就可以,通过电脑上的按键操作

飞机发射子弹:

​ 按键操作,生成子弹,子弹用一个坐标表示,然后贴一个子弹的图片表示子弹,贴在飞机的前面一点

敌机怎么掉落:

​ 和飞机移动差不多,也是改变飞机的坐标(y坐标)

子弹碰撞飞机:

​ 判断两张图片是否相交(数学问题)

实现图形库窗口
    飞机(结构体),子弹(结构体数组),敌机的坐标(结构体数组)
贴飞机
    按键操作(判断是移动飞机还是发射子弹)
移动敌机下落
    看有没有子弹发射出来,需要判断子弹是否和敌机相撞((如果相撞)两个一起消失,在对应的位置里面把两个坐标删掉)

4.优缺点

1.优点

1.程序结构简单,仅有三种基本的结构组成,顺序,选择,循环这三种基本结构,我能就可以解决任何问题,所以对于面向过程要专注于逻辑的学习,而不需要学习记忆很多的语法

2.把大问题分解为小问题解决,会使问题简单化

3.自上而下,一步一步的完善,也就是先从整体角度看待问题,然后列出解决问题需要的步骤,再逐步去完善,这样会让我们全面的考虑问题,使得我们对整个程序的逻辑结构清楚明了。

2.缺点

1.在面向过程的时候,数据和操作往往都是分离的,这样就会导致如果数据的结构发生改变,那么操作数据的函数就不得不重写,这个代价比较大

int fun(int& a , int& b)
{
    return a+b;
}
int mian()
{
    float a=1.3f,b=3.4f;
    fun(a,b)//不能通过,必须要修改fun函数,将int改为float
}

2.数据一般都是不具有封装性的,很多变量都是暴露出来的,容易被篡改

3.当多人协作开发的时候,那么问题就更多了,比如一些标识符重名,每个人之间的项目逻辑不清楚

4.在写一些小项目,一些逻辑的时候,用面向过程的方式来通常都能做到很好,但是涉及多人协作开发的时候,面向过程就显得力不从心了,所以面向对象就孕育而生了

二、面向对象

1.知识点

1.面向对象的程序设计是面向过程的继承和发展,程序对现实世界的抽象描述。现实中的基本单元的物体在程序中对应的基本单元就是对象

2.面向对象可以理解为:现实世界是由对象组成的,无论大小,万物皆对象

3.对象在程序中抽象为两个部分:

a.描述对象的状态或者属性的数据(变量)

b.描述对象的行为或者功能的方法(函数)

2.用面向对象的方式解决问题的思路

1.实现一个类,这个类里面封装好了需要解决这个问题的数据和方法,通过类实例化一个对象,然后调用对象的功能,来完成这个问题

2.换句话来说就是找对象来解决这个问题,如果没有合适的对象,那么就自己写一个

3.面向对象的特点

1.面向对象将数据和行为结合在一起,共同表达一个数据

2.在面向过程的时候,数据和行为是分开的,当问题比较复杂或涉及多人开发,那么会导致拓展和维护很困难。而面向对象能解决这个问题,问题会被分解为一个个的对象,每一个对象有独立的数据和行为,修改或拓展某一个对象是并不会影响到其他对象

3.面向对象的封装性、继承及多态

封装:封装就是将属性(数据)私有化,提供公有的方法(行为)访问私有属性。通过封装可以对对象属性进行存取限制,提高了程序的维护性。

继承:继承可以在原来的对象基础上很快地产生新的对象,新的对象是一个全新的个体,但又有原来对象的特性。如同现实生活中的父子继承,儿子是一个全新的个体,但又继承了父亲这个个体的特点,比如:外貌,性格....

多态:多态是面向对象思想的核心。做到同一个窗口,使用不同的实例就能去执行不同的操作。方便了程序的设计

4.面向对象编程可以使代码维护方便,可扩展性好,支持代码重用技术

4.高内聚低耦合

1.利用面向对象思想的封装,继承和多态,可以设计出“高内聚,低耦合”的程序结构,可以让程序更加灵活,更容易扩展,从而轻松应对软件的扩展需求,降低维护成本。

2.高内聚,低耦合。这是软件工程中的一个概念,通常用来判断一个软件设计的好坏。所谓的高内聚就是指:一个软件模块是由相关性很强的代码组成,只负责单一任务,也就是常说的“单一责任原则”。而低耦合是指:在一个完整的程序中,模块与程序之间,尽可能保持相互独立,即每个模块尽可能独立完成特定的子功能,模块与模块之间的接口,尽可能的少而简单

三、类

1.知识点

1.类是什么

类是一种用户自定义数据类型,可以看做是C语言中结构体的升级版。类是由数据+功能构成的,也就是变量和函数,把变量和函数绑定在一起

2.对象是什么

通过类这种类型定义出来的变量称之为对象

2.类的定义

class 类名
{
    成员
};
示例://类:一个种类,具有什么属性和行为
class CStudent//大写的C开头表示这是一个c++的类
{
    int age;
    char name[20];
    float score;
   public:
    
    void initStudent(int x, float y, const char* s)
	{
		age = x;
		score = y;
		strcpy(name, s);
	}
	void showStudent()
	{
		cout << age << "\t" << score << "\t" << name << endl;
	}
    
	void setAge(int x)//给age赋值
	{
		age = x;
	}
	int getAge()
	{
		return age;
	}
    void speak()
    {
        cout<<"我爱交流"<<endl;
    }
};
int main()
{
    CStudent stu;
    stu.study();
    CStudent stu;
	stu.setAge(18);
	cout << stu.getAge() << endl;
    
    CStudent* pstu = new CStudent;
	pstu->initStudent(18, 99.8f, "胡云飞");
	pstu->showStudent();
	delete pstu;
	pstu = NULL;


}

类的大小计算和结构体一样,但是不算类中的函数,只算变量所占内存大小

类中可以不写成员,但还是要占1字节大小的内存

访问

public ——公有属性

protected——保护属性

private——私有属性

1.类中如果没有声明访问属性,那么默认是私有的

2.类中的变量,建议全部定义为私有属性,为了数据的安全性

3.访问属性的修饰范围:从当前声明开始,直到下一个声明结束,或者到类的末尾结束

4.访问私有属性下面的数据,那么在公有属性下面提供接口(访问类中的数据的函数)

3.对象的定义

类名 对象名;
CStudent stu;
  

4.对象成员的访问

1.通过“ . "

stu.fun();

2.通过“ ->"访问2

CStudent* pstu=new CStudent;

pstu->fun();

不论是类中的变量或者是函数都可以用以上两种方式访问

5。类成员的访问属性

类中是有访问属性的,也就是类中的成员,不是你定义一个对象,就能随便访问的

public ——公有属性:

类外和类中都可以被直接访问,类外通过对象访问

protected——保护属性:

类中及派生类中可以被直接访问,类外需要通过对象调用公有属性的接口访问

private——私有属性:

只有类中可以访问,类外需要通过对象调用公用属性的接口访问

1.类中如果没有声明访问属性,那么默认是私有的

2.类中的变量,建议全部定义为私有属性,为了数据的安全性

3.访问属性的修饰范围:从当前声明开始,直到下一个声明结束,或者到类的末尾结束

4.访问私有属性下面的数据,那么在公有属性下面提供接口(访问类中的数据的函数)

#include<iostream>
#include <stdio.h>
using namespace std;

class CStudent
{
	int age;
	char name[20];
	float score;
public:
	void initStudent(int x, float y, const char* s)
	{
		age = x;
		score = y;
		strcpy(name, s);
	}
	void showStudent()
	{
		cout << age << "\t" << score << "\t" << name << endl;
	}
	void setAge(int x)//给age赋值
	{
		age = x;
	}
	int getAge()
	{
		return age;
	}
	void study()
	{
		cout << "我爱学习" << endl;
	}
};

int main()
{
	CStudent stu;
	stu.setAge(18);
	cout << stu.getAge() << endl;

	CStudent* pstu = new CStudent;
	pstu->initStudent(18, 99.8f, "yunfei");
	pstu->showStudent();
	delete pstu;
	pstu = NULL;


	getchar();
	getchar();
	return 0;
}


6.结构体与类的区别

在.cpp文件中:结构体的默认属性是公有的,类的默认属性是私有的,其他地方,类中可以写的,结构体中也可以写

在.c文件中,结构体里面不能写函数,而且结构体定义变量需要带上关键字,在.cpp中不需要,而且.c中不能使用类

posted @ 2021-02-17 21:14  kisfly  阅读(54)  评论(0编辑  收藏  举报