博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案
阅读量:6348 次
发布时间:2019-06-22

本文共 2051 字,大约阅读时间需要 6 分钟。

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

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

 

转载于:https://www.cnblogs.com/leelds/p/9073659.html

你可能感兴趣的文章
Percona Server安装
查看>>
函数为左边表达式
查看>>
2015.06.04 工作任务与心得
查看>>
icinga2使用587端口发邮件
查看>>
hpasmcli查看HP服务器内存状态
查看>>
极客工具
查看>>
【14】Python100例基础练习(1)
查看>>
boost bind使用指南
查看>>
使用ntpdate更新系统时间
查看>>
Android M 特性 Doze and App Standby模式详解
查看>>
IE FF(火狐) line-height兼容详解
查看>>
谷歌Pixel 3吸引三星用户, 但未动摇iPhone地位
查看>>
python获取当前工作目录
查看>>
VUE中使用vuex,cookie,全局变量(少代码示例)
查看>>
grep -w 的解析_学习笔记
查看>>
量化交易之启航
查看>>
TX Text Control文字处理教程(3)打印操作
查看>>
CENTOS 7 如何修改IP地址为静态!
查看>>
MyCat分片算法学习(纯转)
查看>>
IO Foundation 3 -文件解析器 FileParser
查看>>