C++循环结构问题
C++ Circular Construction Issue
我在赋值时遇到问题。我有一门课叫"网格与记录"。记录是网格,用于存储网格中每个位置被访问的次数。网格必须包含记录类型的数据成员,只要对网格进行更改,就可以存储该数据成员。我已经设法避免了循环依赖性,但我似乎对导致堆栈溢出的"循环构造"有问题。调用Grid构造函数会生成一个Record,它会创建一个Grid,并尝试生成另一个Record等等。我的第一个想法是让Grid的Record数据成员成为一个指针,我将其初始化为NULL,然后在构造函数之外实际创建Record对象,但是赋值特别指出Grid的Record的数据成员必须是Record类型,而不是指向Record的指针。我也不允许给Record一个默认的构造函数,所以我猜我的实现是错误的。关于如何解决这个问题,有什么建议吗?
Record::Record(int rows, int cols) : grid(new Grid(rows, cols)) {};
Grid::Grid(int rows, int cols) : record(new Record(rows, cols)) {};
我认为作业中存在误解,或者写得不好。
看来你想要的是:
Grid
+---+---+-
| a | b |
+---+---+-
| c | d |
+---+---+-
Record
+---+---+-
| 0 | 1 |
+---+---+-
| 2 | 2 |
+---+---+-
这表示a
还没有被访问,并且d
已经被访问了两次。
现在,如果Grid
应该包含Record
来维护其统计信息,那么Record
就不能是Grid
。正如你所注意到的,它是圆形的。然而,Record
是一个网格。所以我怀疑这里存在拼写错误/阅读问题。
我的建议:
class Record {
public:
Record(size_t rows, size_t cols): rows(rows), cols(cols), grid(rows*cols, 0) {}
private:
size_t rows;
size_t cols;
std::vector<size_t> grid;
};
template <typename E>
class Grid {
public:
Grid(size_t rows, size_t cols): grid(rows*cols, 0), record(rows, cols) {}
private:
std::vector<E> grid;
Record record;
};
为什么不让Record有一个实际执行录制的虚拟函数,然后让Grid只是Record的一种类型,然后覆盖录制函数。类似于:
class Record
{
virtual recordSomething();
}
class Grid : Record
{
virtual recordSomething();
}
我不知道我是否对你的问题足够了解,但我认为这应该会有所帮助。祝你好运
我不知道你要使用什么类型的设计结构,但这里有一个解决问题的方法。与其创建一个新的东西,只需让"内部"的构造函数将指针指向"外部"(稍后描述)。
所以,这将是
Record::Record(int rows, int cols) : grid(new Grid(rows, cols,this) {}; //outer
Grid::Grid(Record* master) : record(master) {}; //inner
"外部"类是用户应该使用的类。
"内部"类是出于实现原因(或迭代器和继承等原因)而拥有的类。
交换构造函数,以便遵循上面的样式。用户永远不应该做:Grid f(new Record(rows,cols));
请注意,这几乎是java中内部类的一个非常粗略的近似值。
- 如何重构类层次结构以避免菱形问题
- 包含矢量指针的结构的内存释放问题
- 在类中返回结构时出现问题
- 我对数据结构、双向链表有一些问题
- C++模板类中结构的编译器问题
- 我的超类中的模板问题与结构定义
- 修改C++结构的特征成员时出现问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- 在C++中循环访问自定义结构列表的小问题
- 在C++中对结构向量进行排序时出现问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 我的堆栈和库存清单程序的结构有什么问题?
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 我应该如何在C++中使用结构体解决输入失败的问题?
- DNS 查询格式标头结构中的小字节序问题
- C++,类结构问题
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题