2011-10-13 137 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) 
{ }