类属性中的c++指针

C++ pointer in class attributes

本文关键字:c++ 指针 属性      更新时间:2023-10-16

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

在属性名中写指针的目的是什么?如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 ?

谢谢!

string *strings;

声明了一个指向字符串数组第一个元素的指针。由于C/c++数组/指针的语义,你可以把它当作字符串数组,例如索引为strings[n]来获得第n个元素。

string strings;

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

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

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

    c++中的静态数组与动态数组