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

Defining constructors in a class that uses pointers (C++)

本文关键字:定义 构造函数 C++ 指针      更新时间:2023-10-16

好吧,这是我在这个网站上的第一个问题,我对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;
    };

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

对于默认值,您必须决定私人成员的所有默认值是多少。

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

numMembers = c.numMembers ;

对于第三个,你必须决定什么是cname以及你应该如何处理它

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

不使用字符串数组,只需使用向量,就不需要"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;
};