gpt4 book ai didi

c++ - 实现中的构造函数与 header

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:05 27 4
gpt4 key购买 nike

据我所知,构造函数应该在实现文件中定义,但我只能在一个主文件中找到带有该类的示例,而不是拆分为 .h 和 .cpp 文件

我只需要知道我的以下代码是否以可接受的方式分隔..

实体.h:

    using namespace std;

class cEntity {
private:
/*-----------------------------
----------Init Methods---------
-----------------------------*/
int *X, *Y;
int *Height, *Width;

public:
/*-----------------------------
----------Constructor----------
-----------------------------*/
cEntity (int,int, int, int);

/*-----------------------------
----------Destructor-----------
-----------------------------*/
~cEntity ();

/*-----------------------------
----------Set Methods----------
-----------------------------*/

/*Set X,Y Methods*/
void setX(int x){*X=x;};
void setY(int y){*Y=y;};
void setXY(int x, int y){*X=x; *Y=y;};

/*Set Height, Width Methods*/
void setHeight(int x){*Height=x;};
void setWidth(int x){*Width=x;};
void setDimensions(int x, int y){*Height=x; *Width=y;};

/*-----------------------------
----------Get Methods----------
-----------------------------*/

/*Get X,Y Methods*/
int getX(){return *X;};
int getY(){return *Y;};

/*Get Height, Width Methods*/
int getHeight(){return *Height;};
int getWidth(){return *Width;};
};

和 Entity.cpp:

#include "Entity.h"


cEntity::cEntity (int x, int y, int height, int width) {
X,Y,Height,Width = new int;
*X = x;
*Y = y;
*Height = height;
*Width = width;
}

cEntity::~cEntity () {
delete X, Y, Height, Width;
}

我还要感谢大家的帮助,尤其是对我的第一个问题!

最佳答案

cEntity::cEntity (int x, int y, int height, int width) {

是正确的

   X,Y,Height,Width = new int;

没那么多。那套 Width到一个新的int ,但不是其余的。您可能打算:

   X = new int(x);
Y = new int(y);
Height = new int(height);
Width = new int(width);

请注意,这种构造方法不适用于没有赋值/复制的对象,例如引用。对于某些对象,它也比就地构建它们慢。因此,首选的构建方式如下:

cEntity::cEntity (int x, int y, int height, int width) {
:X(new int(x))
,Y(new int(y))
,Height(new int(height))
,Width(new int(width))
{}

这样更好,但是如果抛出任何异常,您将不得不以某种方式释放已分配的异常。更好的办法是让每个成员都成为 std::unique_ptr<int> ,所以他们会自行解除分配并为您省去很多麻烦。

关于c++ - 实现中的构造函数与 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com