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:是的,这是析构函数的语法。