不熟悉C ++编程, 试图在这里概念化问题:
在本练习中,我们将自己局限于一种数字类型, float,所以我们需要一个这种类型的数组;称之为fmemory。但是,指针值 (地址)也存储在内存中,因此我们需要另一个数组来存储它们。以来 我们使用数组索引来为除最大数组之外的所有数据建模地址和索引 可以存储在int类型中,我们将创建一个这种类型的数组(称之为pmemory)来保存它们 “指针”。
fmemory的索引(称之为fmem_top)指向浮动的下一个可用位置 值可以存储。 pmemory有一个类似的索引(称之为pmem_top)。别担心 关于耗尽“记忆”。我们假设这些阵列足够大,以便每个 我们存储的东西,我们可以简单地将它插入数组中的下一个索引号。 除此之外,我们不会担心内存管理。
创建一个名为Float的类。我们将使用它来模拟存储的float类型的数量 在fmemory而不是真正的记忆。 Float中唯一的实例数据是它自己的“地址”; 也就是说,其浮点值存储在fmemory中的索引。调用此实例变量 地址。 Float类还需要两个成员函数。第一个是单参数构造函数 使用浮点值初始化Float。此构造函数存储float fmem_top指向的fmemory元素中的值,并存储值 在addr中的fmem_top。这类似于编译器和链接器安排存储普通的方式 实内存中的变量。第二个成员函数是重载&运营商。 它只是在addr中返回指针(实际上是索引,类型为int)。
所以,我所扣除的是我需要创建这样的东西
#include <iostream>
using namespace std;
class Float
{
private:
int addr;
float fmem_top,pmem_top;
public:
Float(float* fmem_top){};
Float(int* addr){}
};
int main()
{
//this is where I become confused
}
我会在main方法中使用这样的东西吗? 漂浮的fmem; 漂浮pmem;
答案 0 :(得分:1)
在本练习中,我们将自己局限于一个数值类型float,所以我们需要一个这种类型的数组;称之为fmemory。但是,指针值(地址)也存储在内存中,因此我们需要另一个数组来存储它们。由于我们使用数组索引来建模地址,并且除了最大数组之外的所有数组的索引都可以存储在int类型中,我们将创建一个这种类型的数组(称之为pmemory)来保存这些“指针”。
float fmemory[N]; // "we'll need an array of [float]"
int pmemory[N]; // "we'll create an array... pmemory"
fmemory的索引(称之为fmem_top)指向可以存储浮点值的下一个可用位置。 pmemory有一个类似的索引(称之为pmem_top)。不要担心耗尽“内存”。我们假设这些数组足够大,以便每次存储时我们都可以简单地将它插入数组中的下一个索引号。除此之外,我们不会担心内存管理。
int fmem_top = 0; // "next available place..." fmemory[fmem_top]
int pmem_top = 0; // "similar index to pmemory"
创建一个名为Float的类。我们将使用它来模拟存储在fmemory而不是真实内存中的float类型的数字。 Float中唯一的实例数据是它自己的“地址”;也就是说,其浮点值存储在fmemory中的索引。调用此实例变量addr。
class Float
{
int addr;
类Float还需要两个成员函数。第一个是使用浮点值初始化Float的单参数构造函数。此构造函数将float值存储在fmem_top指向的fmemory元素中,并将fmem_top的值存储在addr中。
Float(float f)
{
fmemory[fmem_top] = f;
addr = fmem_top;
++fmem_top;
}
这类似于编译器和链接器如何安排将普通变量存储在实际内存中。
是的确定。
第二个成员函数是重载&amp;运营商。它只是在addr中返回指针(实际上是索引,类型为int)。
int operator&() { return addr; }
没有迹象显示pmemory
的预期用途,因此不清楚应该用它做什么。它真的没有多大意义。
总的来说,Float
的接口没有为使用它的代码提供任何干净的抽象:可以使用&
检索存储的值索引,但是调用者仍然需要知道{ {1}}找到实际的fmemory
值。
我希望课程能够改进......
答案 1 :(得分:0)
试试这个。我认为这个练习是为了初学者而抽象的。 (虽然我没有编译,但更多的是你理解这个概念。)
const int NUM_FLOATS_MAX = 1000;
class Float
{
static float floatArr[];
static int fmem_top;
int addr;
public:
int operator&() { return addr; }
Float(float f) { floatArr[fmem_top] = f; addr = fmem_top; fmem_top++; }
}
// static members need to be defined outside the class declaration
float Float::floatArr[NUM_FLOATS_MAX];
int Float::fmem_top = 0;
// should print 0 and 1, the indices. (How we get the float value
// we don't know -- overload the operator*()?
int main()
{
Float f1 = 1, f2 = 2;
cout << &f1 << endl << &f2 << endl;
}