如何将类对象传递给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