在使用指针的类中定义构造函数(C ++)

时间:2013-12-09 17:36:46

标签: c++ class pointers

好的,这是我在这个网站上的第一个问题,而且我对C ++很新。我正在尝试创建一系列功能,将各种校园俱乐部的成员放入各自的俱乐部。我得到了这个类骨架,但是我不确定如何定义三个构造函数,特别是如何使用参数内部的变量。除了构造函数之外,您几乎可以忽略所有公共函数。有什么想法吗?

    #include <iostream>
    #include <string>
    #include <vector>

    using namespace std;

    class Club
   {
    public:
     Club();
     Club(Club &c);
     Club(string cname);
     void addMember(string name);
     void removeMember(string name);
     const string getClubName();
     void loadClub();
     const bool isMember(string name);
     const string getAllMembers();
     friend Club mergeClubs(Club& c1, Club& c2);
     ~Club();
    private:
     string *members;
     int numMembers;
     string clubName;
    };

2 个答案:

答案 0 :(得分:1)

您有三个构造函数:默认Club(),复制构造函数Club(Club &c)和第三个Club(string cname)

默认情况下,您必须决定私人会员的所有默认值。

对于复制构造函数,您需要做的就是将&c中的所有内容复制到您自己的记录中。例如,您可以这样做:

numMembers = c.numMembers ;

对于第三个,你必须决定cname是什么以及你应该怎么做。

对于复制构造函数,您确实需要做出一个棘手的决定。复制string * members;意味着什么你可能认为你可以说members= c.members ;但是如果原来的Club被调整大小,那么副本将指向无效的内存。

答案 1 :(得分:0)

不使用字符串数组,只需使用向量,那么您也不需要“numMembers”。

class Club
{
public:
  ...

    void addMember(string name) { members.push_back(name); }
    void removeMemeber(string name) { members.erase(std::remove(members.begin(), members.end(), name), members.end()); }

  ...

private:
    vector<string> members;
    string clubName;
};