C++ 有关指针、指向对象的指针和类的帮助
我期待着被指向正确的方向。 我有一个班级活动C++ 有关指针、指向对象的指针和类的帮助,c++,arrays,oop,class,pointers,C++,Arrays,Oop,Class,Pointers,我期待着被指向正确的方向。 我有一个班级活动 class Event{ private: vector<string> Question; char Mode;// 1 = Ascending 2 = Descending 3 = None string EventName; public: Event(string Name){ EventName = Name; SetQuestionSize(); SetQuesti
class Event{
private:
vector<string> Question;
char Mode;// 1 = Ascending 2 = Descending 3 = None
string EventName;
public:
Event(string Name){
EventName = Name;
SetQuestionSize();
SetQuestion();
Mode = 3;
}
void SetName(string NewName){
EventName = NewName;
}
void SetQuestionSize(){
Question.resize(15);
}
int ReturnQuestionSize(){
return Question.size();
}
void SetQuestion(){
Question[0]="Enter ";
Question[1]="1 ";
Question[2]="to ";
Question[3]="sort ";
Question[4]="in ";
Question[5]="ascending ";
Question[6]="order, ";
Question[7]="2 ";
Question[8]="for ";
Question[9]="Descending, ";
Question[10]="or ";
Question[11]="3 ";
Question[12]="to ";
Question[13]="ignore ";
Question[14]=EventName;
}
string ReturnQuestion(int Index){
return Question[Index];
}
/*vector<string> ReturnQuestion(){
return Question;
}*/
void SetMode(char NewMode){
if (NewMode == '0' || NewMode == '1' || NewMode == '2')
Mode = NewMode;
}
char ReturnMode(){
return Mode;
}
string ReturnName(){
return EventName;
}
};
我对指针很无知,我知道我最终必须学习它们,但是它们是最好的方法还是更好的。C++中的 < P>,指针就像数组< /p> 在WhatTheyWant类中,定义私有成员:
Event *events[2];
这是一个数组数组2D数组,数组长度可变,每个数组中有2个元素
运算符“->”用于访问某类对象的成员,称为对象指针指向对象的指针,但在定义普通对象变量时使用
如果你有勇气和知识使用它们,它们是非常有用的,但一般来说它们是危险的,这就是为什么新语言倾向于采用托管方式。因为你的事件类没有默认构造函数,你需要用它的名称显式构造每个对象,因此,你目前的做法是唯一的做法
如果将默认构造函数添加到事件中,则至少可以通过两种其他方式执行此操作:
如果始终有少量固定数量的对象,则可以声明一个大小不变的数组:
Event events[2];
这样做将在创建WhatTheyWant时自动构造对象,因此您只需在之后设置名称:
WhatTheyWant() {
events[0].SetName("Miss");
events[1].SetName("Dodge");
}
如果希望事件数量可变,可以声明单个指针并动态分配对象数组:
Event *events;
您可以将数字作为参数提供给构造函数:
WhatTheyWant(int numEvents) {
events = new Event[numEvents];
for (int i = 0; i < numEvents; i++)
events[i]->SetName("...");
}
可以使用对象数组或指针数组 对象数组如下所示
class WhatTheyWant{
Event events[2];
public:
WhatTheyWant()
{
events[0] = Event("Miss");
events[1] = Event("Dodge");
}
};
class WhatTheyWant{
Event *events[2];
public:
WhatTheyWant(){
events[0]= new Event("Miss");
events[1]= new Event("Dodge");
}
~WhatTheyWant()
{
delete events[0];
delete events[1];
}
};
注意:您需要向事件类添加默认构造函数来编译上述方法
使用上述方法,不需要释放事件对象。无论何时销毁ywant对象,事件对象都会被销毁
指针数组方法就像你提到的那样
但是,如果不使用auto_ptr或某些c++0x等效工具,就需要释放分配的内存。
删除应该在析构函数中进行,如下所示
class WhatTheyWant{
Event events[2];
public:
WhatTheyWant()
{
events[0] = Event("Miss");
events[1] = Event("Dodge");
}
};
class WhatTheyWant{
Event *events[2];
public:
WhatTheyWant(){
events[0]= new Event("Miss");
events[1]= new Event("Dodge");
}
~WhatTheyWant()
{
delete events[0];
delete events[1];
}
};
我不确定该站点的格式,但假设事件包括向量和字符串库以及事件1:这是一篇充满陈规定型和城市神话的文章。指针实际上并不只是数组。一般来说,它们并不危险。谢谢你的解释。这是一个数组数组2D数组,数组长度可变,每个数组中有2个元素。再加上这个例子帮助了一个我以前无法理解的信息点击。谢谢,我现在正在查找枚举。如果我想创建第三个对象来处理这第二个对象,WhatTheyWant,我需要向WhatTheyWant添加mutator和access函数吗?这些mutator和accessor函数主要是访问Event的mutator和accessor函数,对吗?@Malaken:可能是的。同样,这取决于您尝试执行的操作。谢谢,我将更改我的事件类的默认构造函数,并尝试使用一个对象数组,在类名使其成为析构函数之前,让您知道我猜测的结果?@Malaken:是的,这是析构函数的语法。