3

所以我在继承上发现了这个问题,我试图弄清楚。这是需要的:

创建一个名为 strMetric 的类,它将提供有关字符串的信息。您应该提供一个默认构造函数和一个将字符串作为参数的重载构造函数。

您的字符串度量类应具有以下功能

一个名为 howLong 的方法,它返回字符串的长度

一个名为 vowelCnt 的方法,它返回字符串中元音的数量

一种称为 charSum 的方法,它返回字符串中所有字符的总和

一个名为 upperCase 的方法,它返回大写字符的数量

一个名为 lowerCase 的方法,它返回小写字符的数量

您将使用 strMetric 类作为派生类,使用字符串类作为基类。

笔记:

不要创建自己的字符串类并从中派生。您将使用属于 std 命名空间并在

我一直在解决这个问题,这就是我所拥有的,(现在我只研究其中一种方法,直到我弄清楚如何正确地做到这一点)

//// strmetric.h ////

#ifndef STRMETRIC
#define STRMETRIC
#include <string>
using namespace std;

class strMetric : public string
{
private:

        public:
        strMetric();
        strMetric(string &s);
        int howLong(string s);
};
#endif

//// strmetric.cpp ////

#include "strmetric.h"

strMetric::strMetric()
    :string()
{
}
strMetric::strMetric(string &s)
    :string(s)
{
}

int strMetric::howLong(string s)
{ 
    return s.size();
}

/////main.cpp////

#include <iostream>
#include "strmetric.h"

strMetric testRun("Hello There");

int main()
{

cout << "Here is the sentence being tested " << endl;
cout << endl;
cout << testRun << endl;
cout << endl;
cout << "String length " << endl;
cout << endl;
cout << testRun.length(testRun) << endl;
cout << endl;

}

那么我这样做是正确的,还是我离基地很远?我很难理解这一点。如果我做错了,有人可以告诉我如何正确做,我不需要整个事情,只需要我开始的一部分,这样我就可以很好地了解我应该做什么,谢谢!

4

1 回答 1

4

撇开不从容器继承的一般好建议,而不是更喜欢组合,你仍然没有做对:方法(以及他们希望你定义的其他方法)应该对字符串本身进行操作,而不是在传入的字符串上:stdhowLong

int howLong(); // no args

int strMetric::howLong() {
    // Using "this" below is optional
    return this->size(); // remember, this *is* a string
}

其余的方法将做同样的事情——它们不会接受字符串参数,this而是使用。

你怎么能使用 this-> 而不是加载字符串参数来执行其他方法?

其余方法没有什么不同 - 只需将字符串放入您自己的对象中。我几乎可以肯定,学习如何做到这一点是练习的重点。例如,要添加元音计数器,您可以执行以下操作:

int vowelCnt(); // again, no args

int strMetric:: vowelCnt() {
    int res = 0;
    for (int i = 0 ; i != this->size() ; i++) {
        char ch = (*this)[i]; // Yes, this works
        if (ch == 'a' || ch == 'u' || ch == ...) {
            res++;
        }
    }
    return res;
}
于 2013-04-18T23:57:12.753 回答