类属性中的C ++指针

时间:2014-06-19 05:02:44

标签: c++ pointers attributes function-pointers

我对这个库代码感到困惑..

在属性名称中编写指针的目的是什么? 像string * name;

这是代码:

    #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

全部谢谢!

2 个答案:

答案 0 :(得分:1)

string *strings;

声明指向字符串数组的第一个元素的指针。由于C / C ++数组/指针语义,您可以将其视为字符串数组,例如将其索引为strings[n]以获取第n个元素。

string strings;

只是一个字符串。由于该类用于保存字符串列表,因此仅声明一个字符串是不够的。

答案 1 :(得分:0)

在您提供的代码中,*字符串用于dynamic array。 你可以看到它被strings(new string[other.numstrings])分配,如果它指向某个东西,析构函数会删除它。

有关动态数组的更多信息: - http://www.cplusplus.com/doc/tutorial/dynamic/