每天一个面向对象陷阱,一个算法,一个小看法

来源:互联网 发布:执行方案范文知乎 编辑:程序博客网 时间:2024/05/22 04:38

1.每天一个面向对象陷阱

面向对象编程(OOP)概念、思想被很多大师、教科书写过,相信大家也都有了自己的理解。(至少知道继承是个什么玩意儿了)。但是我们看书有个缺点,当然也可能是我自己的缺点。我们看书的时候,应该这么看:语言为什么要这么设计,如果是你,你自己怎么设计。下面来澄清第一个概念。

为什么sizeof(class)不包含那些非虚的虚拟函数(non-virtual member function)?

这个其实说起来很简单。让我们从头看起。类是什么?对象是什么?。让我们从一个比喻开始。我们看到的哺乳动物,比如牛、羊、马都是动物(class),他们都具有属性,比如胖瘦、高低,他们都能跑,跑起来的形式也不一样。牛是慢吞吞的走,羊是有点跳着走,马是飞奔着走(哈哈哈)。

那么问题来了?我们是应该用属性(胖瘦)区分,还是用方法(跑)区分三种动物呢。这个问题仁者见仁,智者见智。但是OOP基本是用属性区分对象的。那么作为能够区分对象的属性当然必须和对象在一起,而那些描述类的动作的就和类在一起,不和对象在一起。

因此,类是描述对象的地图。非虚的虚拟函数(non-virtual member function)在程序中只占据一份内存,作为一个对对象的描述!!!

所以,下面的sizeof()运行结果才只是4。请看程序

#include<iostream>using namespace std;class Animal{public:    void Run()    {        cout << "I'm running" << endl;    };private:    int Height;};int main(int argc,char*argv[]){    Animal b;    cout << sizeof(b) << endl;    cout << sizeof(Animal) << endl;    return 0;}
2.每天一个算法

算法

0 0
原创粉丝点击