如何将类对象传递给C+中的另一个类成员数组+; 我现在正在解决C++中的类声明问题。我创建了一个类phoneRec来存储姓名和电话号码信息,另一个类phoneBk有3个成员数组来存储带有姓名和号码信息的类phoneRec对象。我在phoneRec中声明函数来输入和保存姓名和电话号码,但我不知道如何在phoneBk中声明函数来检查和删除phoneRec对象中包含的信息

如何将类对象传递给C+中的另一个类成员数组+; 我现在正在解决C++中的类声明问题。我创建了一个类phoneRec来存储姓名和电话号码信息,另一个类phoneBk有3个成员数组来存储带有姓名和号码信息的类phoneRec对象。我在phoneRec中声明函数来输入和保存姓名和电话号码,但我不知道如何在phoneBk中声明函数来检查和删除phoneRec对象中包含的信息,c++,C++,这是我写的代码,有什么想法可以让我完成任务吗 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; #include <string.h> class phoneRec { public: void setName(char NM[]); char *getName(); void setNumber(int num); int ge

这是我写的代码,有什么想法可以让我完成任务吗

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#include <string.h>
class phoneRec
{
public:

    void setName(char NM[]);
    char *getName();
    
    void setNumber(int num);
    int getNumber();


private:
    int numb;
    char name[80];
    

};

void phoneRec::setName(char NM[])
{
    strncpy(name, NM, 79);
}

char *phoneRec::getName()
{
    return name;
}


void phoneRec::setNumber(int num)
{
    numb=num;
}
int phoneRec::getNumber()
{
    return numb;
}



class phoneBk
{
public:

    void deletemem();
    void group();
    phoneRec *obj;

};

void phoneBk::deletemem() 
{ 
    ;
}

void phoneBk::group()
{
    phoneBk Family[1000];

    phoneBk Friend[1000];

    phoneBk Junk[1000];

}
\define\u CRT\u SECURE\u NO\u警告1
#包括
使用名称空间std;
#包括
类phoneRec
{
公众:
void setName(char NM[]);
char*getName();
无效集合编号(int num);
int getNumber();
私人:
智力麻木;
字符名[80];
};
void phoneRec::setName(char NM[])
{
strncpy(名称,NM,79);
}
char*phoneRec::getName()
{
返回名称;
}
void phoneRec::setNumber(int num)
{
numb=num;
}
int phoneRec::getNumber()
{
回归麻木;
}
类phoneBk
{
公众:
void deleteme();
空群();
phoneRec*obj;
};
void phoneBk::deletemem()
{ 
;
}
void phoneBk::group()
{
phoneBk家族[1000];
phoneBk朋友[1000];
phoneBk垃圾[1000];
}

我建议在phoneRec中添加一些标志,以标记组和删除状态。已删除的记录标记为已删除。但在发出flush()命令之前,它不会被删除。这是非常典型的方式。因为实际上从数组中删除元素需要重新分配和重新排列整个数组。不应经常这样做。 phoneRec类

enum GROUP {Family=0, Friend=1, Junk=2};
enum STATUS {Active=0, Deleted=1};
class phoneRec
{
public:
    phoneRec(): group(Junk), deleted(Active){;}
    phoneRec(const int n, const char *a): numb(n), group(Junk), deleted(Active)
    {
        memcpy(this->name, a, 79);
    }
    phoneRec(const int n, const char *a, int g): numb(n), group(g), deleted(Active)
    {
       memcpy(this->name, a, 79);
    }
    void setName(const char NM[]);
    const char *getName() const;

    void setNumber(const int num);
    int getNumber() const;

    void setGroup(const int g) {group = g;}
    void print() const
    {
        std::cout << this->name;
        std::cout << "  No = " << this->numb;
        std::cout << " group = " << this->group << std::endl;
    }
    int status() const { return this->deleted;}
    void del() { this->deleted = Deleted;}
private:
    int numb;
    char name[80];
    int group;
    int deleted;
};

字符名[80]这是使用
std::string
时的要求吗?你可以使用std::vector吗?我想
phoneBk家族[1000]不应是数组。一个家庭不会有1000本电话簿。电话簿可能有1000个条目。我只能使用数组来表示此任务中的字符串:(我假设
phoneRec*obj;
您想要在
phoneBk
中声明一个
phoneRec
对象的动态数组。电话簿是在输入这些数据后存储联系人信息,例如我有一个姓名和电话号码,然后我让它存储在一个名为Family的数组中,该数组可以被视为管理con的一个类别。)机智的人
class phoneBk
{
 public:
    phoneBK() = delete;
    phoneBk(const int nx): MaxRec(nx), curNum(0), nDel(0)
    {
       p_rec = new phoneRec [MaxRec];
    }
   ~phoneBk() { delete [] p_rec ;}
    phoneRec operator[](const int i) const {return p_rec[i];}
    phoneRec& operator[](const int i) {return p_rec[i];}
    int n() const {return this->curNum;} // return current record
    int AddNewRec(const int nu, const char *nm)
     {
       if (curNum >= MaxRec) return 0;
       p_rec[curNum] = phoneRec(nu, nm, Junk);
       ++curNum;
       return 1;
      }
    int AddNewRec(const int nu, const char *nm, const GROUP g)
     {
        if (curNum >= MaxRec) return 0;
        p_rec[curNum] = phoneRec(nu, nm, g);
        ++curNum;
        return 1;
     }
    void deleteRec() // mark the current record deleted
      {
         p_rec[curNum].del();
         ++nDel;
      }
    void deleteRec(const int i) // mark ith record deleted
      {
        p_rec[i].del();
        ++nDel;
      }
    void flush()  // refresh array removing deleted
      {
         phoneRec *tmp = new phoneRec [MaxRec];
         int nc = 0;
         for (int i=0; i<curNum; i++)
         {
            if (p_rec[i].status() == Deleted) continue;
            memcpy((void*)(tmp+nc), (void*)(p_rec+i), sizeof(phoneRec) );
            ++nc;
         }
         delete []  this->p_rec;
         this->p_rec = tmp;
         tmp = nullptr;
         this->curNum -= nDel;
         this->nDel = 0;
       }
     private:
        phoneRec *p_rec; // phone array.
        int curNum;   // current enroll number.
        const int MaxRec; // Max records allow.
        int nDel;      // total number marked deleted.
     };
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
   phoneBk fon(10);
   fon.AddNewRec(12345, "aaaa", Friend);
   fon.AddNewRec(22222, "bbbb", Friend);
   fon.AddNewRec(33333, "cccc", Friend);
   fon.AddNewRec(44444, "dddd", Family);
   fon.AddNewRec(55555, "ffff", Family);
   fon.AddNewRec(66666, "gggg", Family);
   fon.AddNewRec(12345, "aaaa", Junk);
   fon.AddNewRec(12345, "aaaa", Junk);
   std::cout << "Current number = "<< fon.n() << std::endl;
   for (int i=0; i<fon.n(); i++) fon[i].print();
   fon.deleteRec(); // del current rec
   fon.deleteRec(3); // del 4th rec
   fon.flush(); //fresh array
   std::cout << "Current number = "<< fon.n() << std::endl;
   for (int i=0; i<fon.n(); i++) fon[i].print();
   return 0;
}
$ ./a.exe
Current number = 8
aaaa  No = 12345 group = 1
bbbb  No = 22222 group = 1
cccc  No = 33333 group = 1
dddd  No = 44444 group = 0
ffff  No = 55555 group = 0
gggg  No = 66666 group = 0
aaaa  No = 12345 group = 2
aaaa  No = 12345 group = 2

Current number = 6
aaaa  No = 12345 group = 1
bbbb  No = 22222 group = 1
cccc  No = 33333 group = 1
ffff  No = 55555 group = 0
gggg  No = 66666 group = 0
aaaa  No = 12345 group = 2