2015-02-09 34 views
0
struct Buffer{ 
    int* p; 
    unsigned n; 
    mutable std::string toString; 
    mutable bool toStringDirty; 
    Buffer (void); // implement it with correct initialization 
    Buffer (unsigned m, int val = 0); // inits with m ints with val 
    Buffer (const Buffer& a) { 
    Buffer::Buffer(); 
    if (a.n) { 
     unsigned m = (n = a.n) * sizeof(int); 
     memcpy(p = (int*) malloc(m), a.p, m); 
    } 
    toString = a.toString; 
    toStringDirty = a.toStringDirty; 
    Buffer (const Buffer&&); 
    int& operator[](unsigned i); 
    const Buffer& operator=(const Buffer&&); 
    const Buffer& operator=(const Buffer&); 
    const Buffer& operator=(int val); //sets all with val 
    const Buffer operator+(const Buffer& a) const; // concatenates 
    // appends ‘a.first’ ints with an ‘a.second’ value 
    const Buffer operator+(const std::pair<unsigned,int>& a) const; 
    const Buffer operator-(unsigned m) const; // drops m ints at end 
    // converts to string with caching support, format as [%d] per integer 
    const std::string ToString (void) const; 

}; 

我被給了這個結構來轉換成一個Buffer類。任何做和不要因爲這是有史以來第一次遇到這個問題?任何意見,將不勝感激。 我知道我必須使用正確的封裝以及一些移動構造函數。有什麼建議?謝謝。從結構到C++中的類

+1

'struct'和'class'實際上是完全相同的東西,唯一的區別是,如果你沒有指定'struct'的所有成員都是'public',和'class'是'private'。如果您在第一個屬性之前添加「public:」,您將注意到沒有區別。雖然我會建議實際上通過並故意決定什麼應該是'公共'與'私人' – CoryKramer 2015-02-09 18:41:15

+0

一個評論 - 擺脫'int * p'成員並使用'std :: vector '代替。 – PaulMcKenzie 2015-02-09 18:42:56

回答

0

結構和類在C++中是相同的 - 除了成員在類中默認爲public和private。所以你只需要決定哪些數據和功能需要公開,並將它們放在公共區域:部分。經典的實現是沒有公開的數據