C++ c++;继承建筑法

C++ c++;继承建筑法,c++,inheritance,C++,Inheritance,我有一个关于构建方法的问题: virtual std::string getPerson() const; 我有一个孩子级的球员和一个家长是人 职业球员: class Player : public Person { public: Player(const std::string& p_name,const std::string& p_lastname, const int& p_age, const std::string& p_position)

我有一个关于构建方法的问题:

virtual std::string getPerson() const;
我有一个孩子级的球员和一个家长是人

职业球员:

class Player : public Person {
public:
    Player(const std::string& p_name,const std::string& p_lastname, const int& p_age, const std::string& p_position);
    virtual ~Player();
    virtual Person* clone() const;

    std::string getPosition() const;
    virtual std::string getPerson() const;


private:
    std::string m_position;

};
班长:

    class Person {
public:
    Person(const std::string& p_name,const std::string& p_lastname, const int& p_age);
    virtual ~Person();

    virtual std::string getPerson() const;
    std::string getName() const;
    std::string getLastName() const;
    int getAge() const;


private:
    std::string m_name;
    std::string m_lastname;
    int m_age;
};
当我尝试将此添加到播放器中时:

std::string Player::getPerson()
{
    ostringstream os;

        os << "Name         :" << getName() << "\n";
        os << "LastName     :" << getLastName()() << "\n";
        os << "Age          :" << getAge()() << "\n";
        os << "Position     :" << getPosition();

        return os.str();
}

您错过了函数签名末尾的常量。这应该起作用:

std::string Player::getPerson() const
{
    ostringstream os;

        os << "Name         :" << getName() << "\n";
        os << "LastName     :" << getLastName()() << "\n";
        os << "Age          :" << getAge()() << "\n";
        os << "Position     :" << getPosition();

        return os.str();
}
std::字符串播放器::getPerson()常量
{
ostringstream os;
操作系统简单的事情:

std::string getPerson() const;
不同于:

std::string getPerson();

如果您可以使用c++11,请使用override关键字,这样可以避免此类错误。在您的情况下,编译器会检测到问题。但是如果您有其他变体,您可能会声明一个新方法,而不是重载!

您已经复制并粘贴了两次“Player”类。请包含您的Person类以查看它。。。(您复制了两次Player)getPerson()是一个非常令人困惑的函数名。为什么不直接称之为print()呢?或者更好的是,重载运算符不能回答,因为您没有向我们展示Person类,但是您是否想过使用委托而不是继承?也就是说,创建一个引用Person实例的播放器类,而不是一个Person播放器。委托通常比继承更强大(假设您想要一个模型,其中一个人可以成为多个团队的玩家?),尽管不利的一面是它有时会让您在继承足够好的情况下编写更多代码。如果缺少
常量,函数定义应该是
std::string player::getPerson()const
谢谢您的帮助,我将其重命名为print()
std::string getPerson();