对象类型私有类成员

object type private class members

本文关键字:成员 类型 对象      更新时间:2023-10-16

边界框和立方体在它们的构造函数中都有几个参数

头:

#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不是指针,而是简单的实例?

很简单。就像这样:

#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);
}

使cubeboundingBox成为常规(非指针)类成员,然后使用初始化列表为它们调用相应的构造函数,例如

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

首先,当您使用指针时,这是错误的:boundingBox = BoundingBox(min, max);应该在BoundingBox之前有一个new

您可以简单地调整类中的属性声明:

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)
{ }