从用作数据部分的字符串派生的类

时间:2017-05-13 09:12:08

标签: c++ inheritance

我有一个赋值,我必须“创建一个名为Number的类,它是从string派生的。你将使用它作为基类来派生你的Integer和Double类。”接着说,Integer和Double类的数据部分将“消失”。

“因为Number是从string派生的,而Integer和Double是从Number派生的,所以它们都变成了字符串。这为你提供了一个内置的数据部分。”我不明白的是我的数据部分现在在哪里。如何调用并更改它。

“此时您的Number类将只包含以下代码:

-A无参数构造函数,将数据部分设置为“0”

- 一个重载的构造函数,它接受一个字符串并将数据部分设置为传递给它的值。“

//Number class with the two constructors
#ifndef NUMBER
#define NUMBER

#include <iostream>
#include <string>
using namespace std;

class Number: public string
{
public:
    Number() : string("0") { }
    Number(string s) : string(s) { }
};
#endif

双课

//Double class 
#ifndef DOUBLE
#define DOUBLE
#include <string>
#include "Integer.h"
#include "Number.h"
using std::string;
class Double: public Number
{
private:
    // do i call Number here? like Number data; or double data;?
    // or is the data not here?
    void isNan(string s);
    bool nan = false;
    void recursiveNaN(string::iterator p, string::iterator n);

public:
    // Constructors
    Double();
    Double(double d);
    Double(const Double &d);
    Double(const Integer &i);

    // Functionality
    void equals(double d);
    Double &equals(const Double &d);
    Double add(const Double &d);
    Double sub(const Double &d);
    Double mul(const Double &d);
    Double div(const Double &d);
    double toDouble() const;

    //Primitives
    Double add(double d);
    Double sub(double d);
    Double mul(double d);
    Double div(double d);

    // Operator Overload
    Double operator + (const Double &d);
    Double operator - (const Double &d);
    Double operator * (const Double &d);
    Double operator / (const Double &d);
    Double &operator = (const Double &d);
    bool operator == (const Double &d);
    bool operator == (double d);
    bool operator != (const Double &d);
    bool operator != (double d);

    //String stuff
    Double(string s);
    bool isNan();
    void equals(string s);
    Double &operator = (string s);
    string toString();
};



#endif // !DOUBLE

我们的一个提示是关于void quals(double d)函数。提示是将d转换为字符串,然后使用重载的字符串参数调用equals以指定this-&gt;。

void Double::equals(double d)
{
    stringstream ss;
    ss << d;
    this->equals(ss);
}
void Double::equals(string s)
{
    this->isNan(s);
    if (!this->isNan())
        this->assign(s);
    else
        this->assign("0.0");
}

在我的脑海中,这将是他的意思,但这给了我和错误,没有成员函数调用equals.I只需要知道如何调用这些新数据以及如何更改它。我的Number类也不能再使用它了。

1 个答案:

答案 0 :(得分:0)

  

我不明白的是我的数据部分现在在哪里。如何调用并更改它。

你没有。数字是一个字符串,因为您是从字符串派生的。你想要什么额外的数据?您可以通过调用std::string的任何成员函数或将类的实例传递给任何带有std::string(或引用一个)的函数来调用它。