从用作数据部分的字符串派生的类
Posted
技术标签:
【中文标题】从用作数据部分的字符串派生的类【英文标题】:Class derived from string used as data section 【发布时间】:2017-05-13 09:12:07 【问题描述】:我有一个任务,我必须“创建一个从字符串派生的名为 Number 的类。您将使用它作为基类来派生 Integer 和 Double 类。”它继续说来自 Integer 和 Double 类的数据部分将“消失”。
“因为 Number 是从字符串派生的,而 Integer 和 Double 是从 Number 派生的,所以它们都变成了字符串。这为您提供了一个内置的数据部分。”我不明白的是我的数据部分现在在哪里。我如何调用它并更改它。
"此时你的 Number 类将只包含以下代码:
-将数据部分设置为“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->.
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 的成员函数。我只需要知道如何调用这些新数据以及如何更改它。 My Number 类也不能再有任何功能了。
【问题讨论】:
您应该注意,通常 c++ 标准库类不太适合继承它们,例如使用std::string
没有任何virtual
函数可以override
,因此继承有点毫无意义。最好只使用内部std::string
成员变量。
谁会从字符串类派生一个数字类??!
是的,我不知道从字符串派生有多实用,但它是分配所必需的。
任何和所有帮助表示赞赏
"这给了我一个错误,即没有调用 equals 的成员函数"。您为什么不向我们展示您遇到的实际错误?这可能是许多事情中的任何一个。
【参考方案1】:
我不明白我的数据部分现在在哪里。我如何调用它并更改它。
你没有。数字是字符串,因为您是从字符串派生的。你想要什么额外的数据?您可以通过调用std::string
的任何成员函数或将您的类的实例传递给任何接受std::string
(或对其中的引用)的函数来调用它。
【讨论】:
以上是关于从用作数据部分的字符串派生的类的主要内容,如果未能解决你的问题,请参考以下文章