2014-06-19 2 views
0

속성 C++ 포인터 .. 내가이 라이브러리 코드에 대한 혼란 스러워요

속성 이름에 포인터를 작성하는 목적은 무엇인가

? 문자열 * 이름과 같습니다.

#include <iostream> 
    using namespace std; 
    class stringlist 
    { 
    private: 
     int numstrings; 
     string *strings; 
    public: 
     stringlist() : numstrings(0), strings(NULL) 
     {} 
     // copy constructor 
     stringlist(const stringlist &other) : 
      numstrings(other.numstrings), 
      strings(new string[other.numstrings]) { 
      for (int i=0; i<numstrings; i++) { 
       strings[i] = other.strings[i]; 
      } 
    } 
     // destructor 
     ~stringlist() { 
      if (numstrings > 0) delete [] strings; 
     } 
     void printStrings(); 
     const string& getString(int num); 
     void setString(int num, 
         const char *astring); 
    void setString(int num, 
       const string &astring); 
    int getNumstrings() { 
    return numstrings; 
    } 
    void setNumstrings(int num); 
    void swapStrings(stringlist &other) ; 
    // overloaded operators 
    stringlist& operator = 
       (const stringlist &other) { 
    stringlist temp(other); 
    swapStrings(temp); 
    return *this; 
    } 
    }; 

사람이 string *strings 대신 string strings를 사용 의 목적은 무엇인가 설명해주십시오 수 :

코드인가?

감사합니다.

+1

은 문자열의 배열입니다. – Barmar

+0

코드 작성자는'std :: vector >'에 대해 들어 보지 못했습니다. – juanchopanza

답변

1
string *strings; 

은 문자열 배열의 첫 번째 요소에 대한 포인터를 선언합니다. C/C++ 배열/포인터 의미론 때문에 이것을 문자열 배열로 취급 할 수 있습니다. strings[n]으로 색인화하여 n 번째 요소를 가져옵니다.

string strings; 

은 단지 하나의 문자열입니다. 클래스는 문자열 목록을 유지하기위한 클래스이므로 하나의 문자열 만 선언하면 충분하지 않습니다.

+3

그렇지 않습니다. 그것은 문자열에 대한 포인터 일뿐입니다. 의도 한 용도는 배열의 첫 번째 요소를 가리키는 것입니다. 포인터가 몹시 모호 할 수있는 또 다른 이유. –

+0

복사 생성자를 살펴보면'strings (new string [other.numstrings])'을 초기화합니다. 그것은 배열을 할당하고 있습니다. 그가 보여주지 않은 다른 코드는 새로운'stringList'를 만드는 것과 유사합니다. – Barmar

+2

예, 배열의 첫 번째 요소를 가리 킵니다. 선언은 배열에 대한 포인터가 아닙니다. 그것은'string (* strings) [N]'처럼 보일 것입니다. –

관련 문제