关于#C++#的问题,如何解决?

朋友们,有谁知道第17行是什么意思啊,最好能把PrintName函数和main函数也解释一下,谢谢(PS:本人是初学者)

#include <iostream>
#include <string>

using namespace std;

class Entity {
public:
    virtual string GetName() {
        return "Entity";
    }
};

class Player : public Entity {
private:
    string MyName;
public:
    Player(const string &name) : MyName(name) {}

    string GetName() override { 
        return MyName;
    }
};

void PrintName(Entity *entity) {
    cout << entity->GetName() << endl;
}

int main() {
    Entity *e = new Entity();
    PrintName(e);

    Player *p = new Player("LDB");
    PrintName(p);
    return 0;
}

参考如下,有啥不懂评论再问

#include <iostream>
#include <string>
 
using namespace std;
 
class Entity {
public:
    virtual string GetName() { // 父类定义 虚函数
        return "Entity";
    }
};
 
class Player : public Entity {
private:
    string MyName;
public:
    Player(const string &name) : MyName(name) {}  // 带参数的构造函数, MyName(name) 初始化列表 ,MyName是成员变量,name是参数
 
    string GetName() override { // 子类覆写父类的虚函数
        return MyName;
    }
};
 
void PrintName(Entity *entity) { // 这就是一个普通的函数,入参是 Entity类的 指针
    cout << entity->GetName() << endl;
}
 
int main() {
    Entity *e = new Entity(); // 实例化一个Entity类对象
    PrintName(e); // 打印 Entity
 
    Player *p = new Player("LDB"); // 实例化一个Player对象
    PrintName(p); // 打印 LDB
    return 0;
}


PrintName 是一个全局函数
这个就是考察C++动态多态,基类指针指向派生类对象,会调用派生类的重写函数实现。