【问题标题】:Passing child class as a parameter in a constructor [closed]在构造函数中将子类作为参数传递[关闭]
【发布时间】:2023-04-09 21:19:01
【问题描述】:

我是 C++ 新手,我正在尝试创建一个 Player 实例,它接受 RoleCard 的参数。我希望能够传递一个继承 Driver.cpp 中 RoleCard 的 MedicCard。但是,我似乎找不到正确的方法来做到这一点。我的目标是能够动态更改变量 roleCard 以创建新的 Player 实例。

驱动程序.cpp

RoleCard roleCard;
MedicCard medicCard;    
roleCard = medicCard;

Player demoPlayer(roleCard);

播放器.h

#pragma once
#include "RoleCard.h"
#include <string>
#include <vector>

class Player
    {
    public:
        Player();
        Player( RoleCard rolecard );            
    };

播放器.cpp

#include "stdafx.h"
#include "Player.h"
#include<string>

using namespace std;

Player::Player()
{
}

Player::Player(RoleCard roleCard)
{    
}

角色卡.h

#pragma once

class RoleCard
{
public:
    RoleCard();
};

class MedicCard: public RoleCard
{
public:
    MedicCard();
};

角色卡.cpp

#include "stdafx.h"
#include "RoleCard.h"

using namespace std;

RoleCard::RoleCard()
{    
}
MedicCard::MedicCard()
{    
}

【问题讨论】:

  • 具体是什么错误?请将错误文本逐字添加到您的问题中 (edit)。
  • 这不是你的错误。复制/粘贴编译器的原始输出。如果那您的错误,那么您向我们展示的代码不是您要编译的代码;请提供minimal reproducible example 并向我们展示 给出的输出。

标签: c++ inheritance polymorphism


【解决方案1】:

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

RoleCard roleCard;
MedicCard medicCard;    
roleCard = medicCard;

你在派生类中的discard all of the data(也称为切片)。 如果您想要多态行为,请使用指向基类的引用或指针:

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

【讨论】:

  • 感谢您的回答和出色的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 2016-04-21
  • 2015-08-02
  • 2016-07-19
  • 1970-01-01
相关资源
最近更新 更多