做功课,我们刚上完课。考虑如何在我的作业中实现类,但说明中指出使用结构。 (它正在读取二进制文件并编辑信息)查看了我们在课堂上所做的一些事情之后,我可能不需要针对我的情况的课堂。但是现在我很好奇,为什么要在类中使用结构?当您只可以在类中设置数据成员时,为什么要使用结构?结构必须提供什么才能保证这样做?
答案 0 :(得分:1)
将值放入内部struct
而不是仅仅将它们声明为类的成员变量的主要好处是,您可以轻松地实例化该结构的多个实例,并引用一组每个结构中的变量具有单个指针或引用。
作为一个例子,这是一个3D玩具点数组的类的两种实现。第一个使用单独的成员变量,而第二个声明一个内部struct
来表示一个Point
对象。
请注意,在第一个实现中,RotatePoint()
方法采用四个参数,而在seconds参数中仅采用两个参数。能够使用单个struct Point &
参数(而不是三个单独的float &
参数)引用Point既在运行时效率更高,也更不容易被程序员调用。
// implementation without an inner struct
class MyPointArray1
{
public:
[...]
void RotatePoints(float radians)
{
for (int i=0; i<POINTS_ARRAY_LENGTH; i++)
{
// Hazard here -- a tired programmer might specify arguments in the wrong order!
RotatePoint(x[i], y[i], z[i], radians);
}
}
private:
enum {POINTS_ARRAY_LENGTH = 100};
float x[POINTS_ARRAY_LENGTH];
float y[POINTS_ARRAY_LENGTH];
float z[POINTS_ARRAY_LENGTH];
void RotatePoint(float & x, float & y, float & z, float radians)
{
// [math to update the values of x, y, and z would go here]
}
};
// implementation with an inner struct
class MyPointArray2
{
public:
[...]
void RotatePoints(float radians)
{
for (int i=0; i<POINTS_ARRAY_LENGTH; i++)
{
// It's pretty much impossible to get this wrong without provoking a compile-time error :)
RotatePoint(points[i], radians);
}
}
private:
enum {POINTS_ARRAY_LENGTH = 100};
struct Point
{
float x;
float y;
float z;
};
struct Point points[POINTS_ARRAY_LENGTH];
void RotatePoint(struct Point & pt, float radians)
{
// [math to update the values in (pt) would go here]
}
};
答案 1 :(得分:0)
据我所知,当您只想在该类中创建对象时,可以在该类中实现一个结构。在类之外,您将无法创建该结构的对象。