C语言程序员程序员技术栈

c++基础(继承)

2019-04-30  本文已影响3人  zidea
Cplusplus-tutorial-in-hindi.jpg

面向对象中三个特性之一的继承,可能是许多人职责OO的一点,高耦合度,所以大家都推崇组合(也叫内聚)而非继承。继承是子从父页,设计继承是处于消除代码 copy。其实面向对象设计不是让我们把真实世界抽象为对象来表示出来,面向对象思想是我们设计程序,组织代码的方案。

#include <iostream>

class Entity
{
  public:
    float x, y;
    void Move(float xa, float ya)
    {
        x += xa;
        y += ya;
    }
};

class Player : public Entity
{
  public:
    const char *name;
};

int main(int argc, char const *argv[])
{

    Player p;
    p.Move(5, 5);
    std::cin.get();
}

这是 c++ 中继承方式,继承背后究竟发生什么了,现在 player 的实例就具有两种类型 Player 类型和 Entity 类型,在 c++ 中类型是比较复杂的,要想完全理解 c++ 的类型系统还需要话费精力和时间。

class Player : public Entity

其实可以 Player 理解为 Entity 扩展,其实扩展应该别继承更加贴切,Player 也是 Entity 的超集,就像 typescript 是 javascript 超集语言,typescript 拥有所有 javascript 的语言特性。

    std::cout << "size of Entity: " << sizeof(Entity) << std::endl;
    std::cout << "size of Player: " << sizeof(Player) << std::endl;
size of Entity: 8
size of Player: 16

如果 Player 没有继承 Entity 在大小是由const char *name;占 4 个字节,再加之拥有 Entity 所占 8 字节就是 12 字节,注意这里const char *name;是指针所以是 4 字节。

上一篇 下一篇

猜你喜欢

热点阅读