据我所知,构造函数应该在实现文件中定义,但我只能在一个主文件中找到该类的示例,而不是拆分为.h和.cpp文件
我需要知道的是,以下代码是否以可接受的方式分开..
Entity.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;
}
我还要感谢大家的帮助,尤其是我的第一个问题!
答案 0 :(得分:3)
是的,没关系。 但是,构造函数和析构函数存在问题。 你的代码实际上做的是分配一个int,你的析构函数也释放一个int。 无论如何,这里不需要使用指针。 更好的实现(如果我们不使用智能指针)可能是:
[Entity.h]
private:
/*Private fields*/
int X, Y;
int Height, Width;
[Entity.cpp]
cEntity::cEntity (int x, int y, int height, int width) {
X = x;
Y = y;
Height = height;
Width = width;
}
cEntity::~cEntity () {
}
还有一件事。尽量避免头文件中的using namespace std;
。如果这样做,你强制那些包含你的标题的人使用这个using语句,它会引发命名空间冲突。
答案 1 :(得分:3)
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>
这样更好,但如果抛出任何异常,您将不得不以某种方式释放已分配的异常。更好的方法是让每个成员都成为{{1}},这样他们就可以解除分配并避免许多麻烦。
答案 2 :(得分:1)
你的分离很好。这些函数的实现是错误的,但你已经适当地将它们与声明分开了。 (他们不会像你想象的那样分配或释放任意数量的对象。)
答案 3 :(得分:0)
是。至少对于分离来说,这通常是最好的方法。
至于实际实施,你有一些问题。我不确定你要用构造函数做什么,或者如果你有类成员变量的正确数据类型但似乎有些东西。
答案 4 :(得分:-1)
直接在类中定义的任何方法都是隐式内联的,包括构造函数。
即。
class MyClass
{
public:
MyClass() {};
};
定义了一个内联构造函数,它可能(或可能不)提高代码性能,
尽管
class MyClass
{
public:
MyClass();
};
MyClass::MyClass()
{
};
没有内联,因此没有这些好处。这两个选项都是正确的C ++。
只需2美分。
P.S是的,当你决定以这种方式在一个类中存储指针时,你打开一个Pandora框。