我对这个库代码感到困惑..
在属性名称中编写指针的目的是什么? 像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
?
全部谢谢!
答案 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/