2011-02-06 116 views
0

我有這段代碼:幫助C++類定義

int main() 
{ 
    String s1; // s1 == "" 
    assert(s1.length() == 0); 

    String s2("hi"); // s2 == "hi" 
    assert(s2.length() == 2); 

    cout << "SUCCESS" << endl; 
} 

我想寫一個類,將通過它,並獲得了結局「COUT」語句。

到目前爲止,我已經是這樣的:

#include <iostream> 
#include <cassert> 
#include <string> 

using namespace std; 

class String 
{ 
     int size; 
     char * buffer; 
public: 
     String(); 
     String(const String &); 
     String(const char *); 
     ~String(); 
    int length(); 
}; 

String::String() 
{ 
    buffer = 0; 
} 

String::String(const String &) 
{ 

} 

String::String(const char *) 
{ 
    buffer = 0; 
} 

String::~String() 
{ 
    delete[ ] buffer; 
} 

String::length() 
{ 

} 

我相信這是正確的,到目前爲止,至少在一類是如何應建立方面,但我真的不知道什麼應該去內一些成員函數。任何人都可以幫我解決問題,或者向我展示一些我需要讓我的課程通過主程序並計算正確的緩衝區大小並讀取字符串的示例?

在此先感謝。

+2

我假設這個'String'類只是一個學習目的的例子,不是對'std :: string'的重新發明......是真的? – 2011-02-06 00:49:48

+4

我認爲你應該寫更多的代碼,並再次發佈。人們會更快樂地糾正錯誤,而不是爲自己編寫代碼。你會學到更多的方式。 – TonyK

回答

1

你知道關於指針和數組的任何東西嗎?

字符串基本上是一個字符數組。你需要做的是始終使用新的[]運算符分配適量的內存,確保在它應該是清理的時候(你已經清楚了,delete []運算符是正確的方法)和在那裏放置你想要的內容。

複製構造函數應該遍歷所傳遞的char *(不管它是在參數中還是在另一個String對象的內部char *中 - 它是相同的)並複製內容。

在C++中,通常使用「null terminated strings」,這意味着每個char *在末尾都有一個0(二進制,而不是ASCII字符0)。你可能需要的函數是strlen - 它返回參數中傳遞的字符串的長度(字符串,我的意思是char *當然)