2011-10-13 76 views
0

兩個邊框和立方體採取一些參數在其構造對象類型私有類成員

頁眉:

#ifndef WALL_H 
#define WALL_H 

#include "cube.h" 
#include "BoundingBox.h" 

class Wall 
{ 
    private: 
     Cube* cube; 
     BoundingBox* boundingBox; 
    public: 
     Wall(D3DXVECTOR3 min, D3DXVECTOR3 max); 
     ~Wall(); 
     void Draw(D3DXMATRIX matView, D3DXMATRIX matProjection); 
}; 

#endif 

來源:

#include "Wall.h" 

Wall::Wall(D3DXVECTOR3 min, D3DXVECTOR3 max) 
{ 
    cube = new Cube(D3DXCOLOR(255, 20, 20, 255), min, max); 
    boundingBox = new BoundingBox(min, max); 
} 

void Wall::Draw(D3DXMATRIX matView, D3DXMATRIX matProjection) 
{ 
    cube->Draw(matView, matProjection); 
} 

Wall::~Wall() 
{ 
    delete cube; 
    delete boundingBox; 
} 

我的問題是,我將如何修改這些類使得cube和boundingBox不是指針而是簡單的實例?提前致謝。

回答

2

這很簡單。就像這樣:

#ifndef WALL_H 
#define WALL_H 

#include "cube.h" 
#include "BoundingBox.h" 

class Wall 
{ 
private: 
Cube cube; 
BoundingBox boundingBox; 
public: 
Wall(D3DXVECTOR3 min, D3DXVECTOR3 max); 
void Draw(D3DXMATRIX matView, D3DXMATRIX matProjection); 
}; 

#endif 

來源:

#include "Wall.h" 

Wall::Wall(D3DXVECTOR3 min, D3DXVECTOR3 max) 
    :cube(D3DXCOLOR(255, 20, 20, 255), min, max) 
    ,boundingBox(min, max) 
{ 
} 

void Wall::Draw(D3DXMATRIX matView, D3DXMATRIX matProjection) 
{ 
    cube.Draw(matView, matProjection); 
} 
+0

如果我想,我將如何在構造函數中編寫初始化語法,而不是使用初始化列表?還有什麼是初始化列表的好處?只是清晰? – SirYakalot

+0

您不能在構造函數體內運行它。您的對象在初始化程序列表中初始化。所以如果你不這樣做,編譯器將使用默認的ctor。如果它不存在,你會得到一個錯誤。 – mkaes

0

使cubeboundingBox定期(非指針)類成員,然後使用初始化程序列表調用適當的構造函數,例如,所有的

Wall::Wall(D3DXVECTOR3 min, D3DXVECTOR3 max) : 
    cube(D3DXCOLOR(255, 20, 20, 255), min, max), 
    boundingBox(min, max) 
{ 
    // nothing 
} 
+0

上午我就在想,如果立方體不接受任何參數,你不需要任何地方初始化它? – SirYakalot

+1

@SirYakalot:沒錯 - 如果你沒有使用初始化列表指定構造函數,將使用默認的無參數構造函數。 –

0

首先,這是錯誤的,當你使用指針工作:boundingBox = BoundingBox(min, max);應該有BoundingBoxnew

你可以簡單地調整裏面的類屬性的聲明:

class Wall 
{ 
private: 
    Cube cube; 
    BoundingBox boundingBox; 
public: 
    Wall(D3DXVECTOR3 min, D3DXVECTOR3 max); 
    ~Wall(); 
    void Draw(D3DXMATRIX matView, D3DXMATRIX matProjection); 
}; 

現在您調整CTOR:

Wall::Wall(D3DXVECTOR3 min, D3DXVECTOR3 max) : cube(D3DXCOLOR(255, 20, 20, 255), min, max), boundingBox(min, max) 
{ }