[C++之旅] 14 物件成員與物件陣列

weixin_33872660發表於2018-11-24

[C++之旅] 14 物件成員與物件陣列

物件陣列

使用方式

  • 從棧中例項化物件陣列

    類名 物件名[物件個數];
    物件名[需訪問的第幾個物件 - 1].成員/成員函式...
    

    物件陣列中有n個物件則例項化時呼叫n次建構函式

  • 從堆中例項化物件陣列

    類名 *物件名 = new 類名[物件個數];
    物件名[需訪問的第幾個物件 - 1].成員/成員函式...
    物件名->物件成員/成員函式...
    delete []物件名;
    物件名 = NULL;
    

    物件陣列中有n個物件則例項化時呼叫n次建構函式,delete時呼叫n次解構函式,採用指標的方式訪問成員時,即類名 p = new 類名[n],p->成員和p[0].成員,表示物件陣列中第一個物件的成員,(p+1)->成員,表示物件陣列中第二個物件的成員,以此類推,但如果執行了p+=1(此時p已經改變,而p+1則不改變p的值);則p[0]指向的是物件陣列的第二元素。

    物件成員

    即物件中包含有其他的物件

    class Coordinate
    {
    public:
      Coordinate(int x, int y):
        m_x(x), m_y(y){}
      
    private:
      int m_x;
      int m_y;
    };
    

    Coordinate表示點的類,其中包含點的xy座標

    class Line
    {
    public:
      Line(int x1, int y1, int x2, int y2):
        m_coorA(x1, y1), m_coorB(x2, y2){}
    
    private:
      Coordinate m_coorA;
      Coordinate m_coorB;
    };
    

    Line表示線的類,包含兩個點的類,即包含AB兩個座標點

    int main(void)
    {
        Line *p = new Line(1, 2, 4, 5);
        
        delete p;
        p = NUll;
        return 0;
    }
    

    例項化物件時,先例項化m_coorA這個物件再例項化m_coorB這個物件,再例項化p這個物件。銷燬時,先銷燬p再銷燬m_coorB再銷燬m_coorA。

相關文章