码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-22 20:40:04      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:动态   att   ring   min   主函数   根据   问题   tac   简单   

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

假设你只知道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)。

 

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

标签:动态   att   ring   min   主函数   根据   问题   tac   简单   

原文地址:https://www.cnblogs.com/leelds/p/9073659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!