zoukankan      html  css  js  c++  java
  • 面向对象

    面向对象

    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 << "	" << score << "	" << 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 << "	" << score << "	" << 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中不能使用类

  • 相关阅读:
    HDU 1717 小数化分数2(最大公约数)
    C#计数器
    C#计数器
    c#计算器
    c#计算器
    PHP 错误与异常 笔记与总结(18 )页面重定向实现
    想使用 MongoDB ,你应该了解这8个方面!
    大数据代表未来,投资力度增强
    统计学和数据挖掘的异同探讨
    统计学和数据挖掘的异同探讨
  • 原文地址:https://www.cnblogs.com/Kissfly123/p/14409787.html
Copyright © 2011-2022 走看看