将子类作为构造函数中的参数

Passing child class as a parameter in a constructor

本文关键字:参数 构造函数 子类      更新时间:2023-10-16

我是C 的新手,我正在尝试创建一个播放器的实例,该实例以Rolecard的态度参数。我希望能够通过驱动程序中的rolecard的医疗卡。但是,我似乎找不到正确的方法。我的目标是能够动态更改可变rolecard以创建新的玩家实例。

驱动程序.cpp

RoleCard roleCard;
MedicCard medicCard;    
roleCard = medicCard;
Player demoPlayer(roleCard);

player.h

#pragma once
#include "RoleCard.h"
#include <string>
#include <vector>
class Player
    {
    public:
        Player();
        Player( RoleCard rolecard );            
    };

player.cpp

#include "stdafx.h"
#include "Player.h"
#include<string>
using namespace std;
Player::Player()
{
}
Player::Player(RoleCard roleCard)
{    
}

rolecard.h

#pragma once
class RoleCard
{
public:
    RoleCard();
};
class MedicCard: public RoleCard
{
public:
    MedicCard();
};

rolecard.cpp

#include "stdafx.h"
#include "RoleCard.h"
using namespace std;
RoleCard::RoleCard()
{    
}
MedicCard::MedicCard()
{    
}

当您将派生类的对象分配给基本类的对象时

RoleCard roleCard;
MedicCard medicCard;    
roleCard = medicCard;

您丢弃了派生类中的所有数据(也称为切片)。如果您想要多态性行为,请使用参考或指示基准:

Player(RoleCard& rolecard);
...
MedicCard medicCard;
Player demoPlayer(medicCard);