使用继承的类

Classes using Inheritance

本文关键字:继承      更新时间:2023-10-16

需要一些继承方面的帮助。我必须写一个名为Skater的类,它继承了类ContactSkaterdouble成员变量personalBest

我写了这个类,但我不明白如何将personalBest添加到toString函数以输出它。以下是目前为止的内容:

using namespace std;
class Contact
{
private:
    string name;
    string email;
public:
    Contact();
    Contact(string nom, string elecMail){name = nom; email = elecMail;}
    string getName()const {return name;};
    string getEmail()const {return email;}
    void setName(string nomChange){name = nomChange;}
    void setEmail(string emailUpdate){email = emailUpdate;}
    string tostring () {return name + " : " + email;}
};
class Skater : public Contact
{
public:
    double personalBest;
    Skater(string name, string email) : Contact(name, email){}
    void setPerBest(double pBest){personalBest = pBest;}
    double getPerBest()const {return personalBest;}
};

int main() 
{
    Contact one("Mary", "papemary@fhda.edu");
    cout << one.tostring() << endl;
    cout << endl;
    Skater sk("Polina Edwards", "edwardsp@sharksice.com");// should be ("Polina Edwards", "edwardsp@sharksice.com", 58.2)
    cout << sk.tostring() << endl;             
    return 0;
}

谢谢你的建议。

您应该在Contact基类中将tostring()声明为virtual:

virtual string tostring() {...}

在Skater中重写并在这里实现特定的行为

Contact中将toString声明为virtual,并在Skater类中重写它:

class Contact{
 public:
  virtual string toString(){ return name + " : " + email;}
  //other members
};

class Skater:public Contact{
  public:
   string toString() override { 
     return Contact::toString() + "anything";//get return value from parent and append anything you want
   }
};

您需要将toString声明为一个虚方法,该方法将允许自定义隐藏在具有相同签名的函数中的逻辑

class Contact
{
public:
  //...
  virtual string toString () { return name + " : " + email;}
                   ^
           // better use a camel case
};

并根据需要重写

#include <sstream>
class Skater : public Contact
{
public:
  //...
  string toString () override {
                      ^^^^
                      // be explicit about this
       std::stringstream sstm;
       sstm << name << ":" << email << personalBest;
       result = sstm.str();
};

您也可以在overrides方法中简单返回Contact::toString() + personalBest