为什么我的字符串长度函数不返回长度?

时间:2016-02-03 04:47:14

标签: c++ string object constructor

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


class String {
    public:
        String(); 
        String(const char []); 
        String(const String &); 
        int Compare(const String &) const; 
        int Compare(const char[]) const;
        String & Copy(const String &); 
        String & Copy(const char[]); 
        size_t Len() const; 
        String & Conc(const char[]);
        String & Conc(const String &);
        String Display() const;

    private:
        size_t Letters;
        size_t Slots;
        char* Fazah;
    };

    String::String() {
        Letters = 0;
        Slots = Letters;
        Fazah = new char [Slots + 1];
        Fazah[0]= '\0';
    }

    String::String(const char otherVar[]) { 
        Letters = strlen(otherVar);
        Slots = Letters;
        Fazah = new char [Slots + 1];
        strcpy(Fazah, otherVar);
    }

    String::String(const String & otherVar) {
        Slots = otherVar.Slots;
        Letters = otherVar.Letters;
        Fazah = new char [Slots + 1];
        strcpy (Fazah, otherVar.Fazah);
        cout  <<"Copy const"<< endl;
    }

    int String::Compare (const String & otherVar) const {
        return strcmp (Fazah, otherVar.Fazah);
    }

    int String::Compare(const char otherVar []) const {
        return strcmp (Fazah, otherVar);
    }

    inline size_t String::Len ()const {
        return Letters;
    }

    String String::Display() const {
        return* this;
    }

    String & String::Copy(const String & otherVar) {
        delete[] Fazah;
        Letters = otherVar.Letters;
        Slots = otherVar.Letters;
        Fazah = new char [Slots + 1];
        return *this;
    }

    String & String::Copy(const char otherVar []) {
        delete[] Fazah;
        Letters = strlen (otherVar);
        Slots = Letters;
        Fazah = new char [Slots + 1];
        return *this;;
    }

    String & String::Conc(const String & otherVar) {
        //delete[] Fazah;
        Letters = Letters + otherVar.Letters;
        Slots = Slots + otherVar.Slots;
        Fazah = new char [Slots + 1 ];
        return*this;
    }

    String & String::Conc(const char otherVal[]) {
        Slots = Slots + Letters;
        Letters = Letters + strlen(otherVal);
        Fazah = new char [Slots + 1];
        return* this;
    }

    int main() {
        String Str2("abcdefg");
        String Len(Str2);
    }

我已经学习了几个星期的c ++,所以我还是比较新的。在这些时候,我只是不确定该如何解决我的问题,这是其中一个时代。这甚至不是语法错误,因此它使修复更加困难。 这可能是因为我还是很陌生;在我的脑袋String Len(Str2)应该返回字符串的长度,但它不会返回cout <<"Copy const"<< endl。不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

该行

String Len(Str2);

创建String的另一个实例。它不会调用Len成员函数。你需要使用:

size_t len = Str2.Len(); 

答案 1 :(得分:0)

这不是你如何称呼成员函数。

String Len(Str2);表示您只是在复制构造函数{{String的名称下创建另一个LenStr2的内容将被复制到该String::String (const String & otherVar) 1}},你写的就会被调用。

您应该使用Str2.Len()来调用您编写的相应成员函数inline size_t String::Len ()const

然后你应该使用cout在控制台上打印它:

std::cout<<Str2.Len();

答案 2 :(得分:0)

要打印出来,请在main中更改:

String Len(Str2);

分为:

std::cout << Str2.Len() << std::endl;