3

だから私は理解しようとしている継承でこの問題を見つけました。これが必要なものです:

文字列に関する情報を提供する strMetric というクラスを作成します。既定のコンストラクターと、文字列を引数として受け取るオーバーロードされたコンストラクターを提供する必要があります。

文字列メトリック クラスには、次の機能が必要です。

文字列の長さを返す howLong というメソッド

文字列の母音の数を返す vowelCnt というメソッド

文字列内のすべての文字の合計を返す charSum というメソッド

大文字の数を返す upperCase というメソッド

小文字の数を返す lowerCase というメソッド

strMetric クラスを派生クラスとして使用し、文字列クラスを基本クラスとして使用します。

ノート:

独自の文字列クラスを作成して派生させないでください。std 名前空間の一部であり、で定義されている文字列クラスを使用します。

私はこれを解決してきましたが、これが私が持っているものです(現在、これを適切に行う方法がわかるまで、1つの方法にしか取り組んでいません)

//// 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;

}

それで、私はこれを正しく行っていますか、それともベースから外れていますか? 私はこれを理解するのに苦労しています。私がそれを間違ってやっているなら、誰かがそれを正しく行う方法を教えてくれるかもしれません.私はすべてを必要としません.私が始めた1つの部分だけが必要です.

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 に答える