• 可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案


    本文假设,诸位看官完全不了解,何谓面向对象,如果已经入门请跳过。另:欢迎交流,不喜勿喷。

    假设你只知道class的概念,但是还没有深入理解,不理解属性,不理解方法,那么看下去。

    有这么一个场景

      路上,一只狗,一只鸭子,狗跑过去攻击了鸭子,鸭子发出惨叫,并且血量下降。


          首先要知道,对象是由类实例化来得,一只狗一定是有狗这个类实例化来得,同理一只鸭子也是必定是鸭这个类实例化得到得。

    类是静态得,对象是“活”了得类.

    类是一个模子,而对象就是模子刻出来得具体物件

    类->对象,其实就是 抽象->具体


         那么根据场景我们尝试写下狗这个类,根据场景要求,狗能跑,能攻击,同理,鸭子能惨叫,并且有血量。

    ok,现在直接用python 写下代码:

    class dog(object):
    
        def run(self):
            print('dog is run')
    
        def attack(duck):
            print('dog is attack duck')
            duck.screaming()
    
    class duck(object):
        hp=100
        def screaming(self):
            self.hp=self.hp-10
            print('duck hp is ',self.hp) 
               
            print('duck is sceaming')
    
    if __name__=='__main__':
        dg=dog()
        dk=duck()
        dg.run()       #狗跑过去
        dg.attack(dk)  #攻击鸭子dk ,导致鸭子dk惨叫流血

    以上,dog是类,dg是dog得实例化对象

    如果不习惯python得动态语言特性,请看下面得C#代码实现:

     class duck
        {
            private int hp = 100;
    public void screaming() { hp = hp - 10; Console.WriteLine("duck hp is "+this.hp); Console.WriteLine("duck scraming"); } }
    class dog { public void run() { Console.WriteLine("dog is run "); } public void attack(duck dk) { Console.WriteLine("dog is attacking duck"); dk.screaming(); } } class Program { static void Main(string[] args) { var dg = new dog(); var dk = new duck(); dg.run(); dg.attack(dk); } }

    感觉写起来还是C#爽,读起来还是python好,以下代码用C++实现:

    class duck  //头文件
    {
    public:
        duck();
        ~duck();
        void screaming();
    private:    
            int _hp=100;
    };
    #include "duck.h"   //cpp
    #include <iostream>
    using namespace std;
    duck::duck()
    {
        
    }
    
    
    duck::~duck()
    {
    }
    
    void duck::screaming()
    {
        this->_hp = this->_hp - 10;
        cout << "duck hp is:" << this->_hp << endl;
        cout << "duck is Screaming"<<endl;
    }
    
    #include "duck.h"  //头文件
    class dog
    {
    public:
        dog();
        void run();
        void attack(duck *dk);
        ~dog();
    };
    
    #include "dog.h"  //cpp
    #include "duck.h"
    #include <iostream>
    using namespace std;
    dog::dog()
    {
    }
    
    void dog::run()
    {
    }
    
    void dog::attack(duck *dk)
    {
        cout << "dog attack duck" << endl;
        dk->screaming();
    }
    
    
    
    dog::~dog()
    {
    }

    //主函数
    int main()
    {
        auto dg = new dog;
        auto dk = new duck;
        dg->attack(dk);

        delete dk;
        delete dg;

        return 0;
    }


    相对而言,Cpp就不是那么友好了,不过这也只是同一思想得三种实现而已。

          那么问题来了,为什么会有面向对象这个概念,这个例子中无外乎就是当满足一个条件时(狗跑过去攻击)某一变量得值发生变化(鸭子血量下降10),我用C语言也能实现啊

    为什么要面向对象,为什么要class dog与class duck呢?

    那么我将在下一节里说一下自己得看法,欢(shou)迎(xia)拍(liu)砖(qing)。

  • 相关阅读:
    lumen生成key
    github发布版本
    如何使用.gitignore文件删除掉已经提交的文件
    vue中计算属性和侦听属性
    Mac命令行指定特定程序打开文件
    MacOS中创建Sublime Text3快捷方式返回Operation not permitted的原因及解决
    Mac 下 visual studio code 编辑器 设置为中文
    Unix/Linux环境C编程入门教程(14) Mandriva LinuxCCPP开发环境搭建
    Unix/Linux环境C编程入门教程(13) 开发环境搭建VMware软件安装
    Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建
  • 原文地址:https://www.cnblogs.com/leelds/p/9073659.html
Copyright © 2020-2023  润新知