跳转至

27 C++继承

1. 继承

面向对象是一个非常非常大的编程范式,类的继承是其中最基本的一个概念,是我们可以利用的最强大的特性之一。继承使类之间有了相互关联的层级关系,换句话说,它使我们拥有一个包含通用功能的积累,然后从这个最开始的父类中可以创建出很多的派生类。

这就是为什么继承非常有用,以为它可以帮助我们避免写很多重复的代码 code duplication是指我们必须多次地写相同的代码,或者代码略微不同但是实际上是在做相同的事。

为了避免一次次地重复,我们可以把所有通用的functions放在一个父类中,然后很容易地从基类(base class)中创建派生类,稍微改变一些功能或者引入全新的功能。

—— 继承给我们提供了这样一种方式:把一系列类的所有通用的代码(功能)放到基类中,这样我们就不用像写模板那样不断重复了。

案例

class Entity
{
public:
    float X, Y;

    void Move(float xa,float ya)
    {
        X += xa;
        Y += ya;
    }
};

class Player //要做的和Entity类很像,多了个Name和功能
{
public:
    const char* Name;
    float X, Y;

    void Move(float xa, float ya)
    {
        X += xa;
        Y += ya;
    }

void PrintName()
    {
        std::cout << Name << std::endl;
    }
};
那么,问题来了:

2. 怎么继承?

class Entity   // sizeof(Entity) = 8 (2个float)
{
public:
    float X, Y;

    void Move(float xa,float ya)
    {
        X += xa;
        Y += ya;
    }
};

class Player : public Entity // 此时这个Player类同时是Entity和Player类
{                            // sizeof(Player) = 12 (2个float,1个char)
public:
    const char* Name;

    void PrintName()
    {
        std::cout << Name << std::endl;
    }
};

int main()
{
    Player player;
    player.PrintName();
    player.Move(5,5);
    std::cin.get();
}

3. 多态

多态polymorphism,基本上来说就是使用一个单一的符号来表示多个不同的类型