C++ 如何从类返回自定义数组项并操作其属性?C++;

C++ 如何从类返回自定义数组项并操作其属性?C++;,c++,arrays,class,C++,Arrays,Class,我试图使用get函数从表类返回一个单元格数组项。Cell类有自己的set函数 我试着制作一个单元格数组,获取并设置属性。它起作用了,但出于某种原因,它在这里不起作用 类单元{ 智力内容; ... 公众: 单元格(){ 内容=0; ... } int getContent(){ 返回内容; } void setContent(int x){ 内容=x; } }; 类表{ 细胞[10]; 公众: 表(){} 单元getCell(inti){ 返回单元[i]; } }; int main(){ 表t;

我试图使用get函数从表类返回一个单元格数组项。Cell类有自己的set函数

我试着制作一个单元格数组,获取并设置属性。它起作用了,但出于某种原因,它在这里不起作用

类单元{
智力内容;
...
公众:
单元格(){
内容=0;
...
}
int getContent(){
返回内容;
}
void setContent(int x){
内容=x;
}
};
类表{
细胞[10];
公众:
表(){}
单元getCell(inti){
返回单元[i];
}
};
int main(){
表t;
t、 getCell(0)、setContent(22);
这是因为这里

Cell getCell(int i) {
    return cells[i];
}
您返回的是
单元格的一个副本
。然后更改其内容,但当副本超出范围时,这些内容将丢失。
getCell(0)
生成一个副本,该副本在此行末尾被丢弃。您希望返回对单元格的引用:

Cell& getCell(int i) {

现在,它正在更改
单元格[10]
单元格的内容,而不是其副本。

您可以尝试以下内容:

Cell* getCell(int i) {
   return &cells[i];
}


t.getCell(0)->setContent(22);
std::cout<<t.getCell(0)->getContent();
Cell*getCell(inti){
返回&单元格[i];
}
t、 getCell(0)->setContent(22);

std::cout
getCell
返回一个副本。您设置的单元格22与您稍后调用的单元格不一样
getContent
如何解决此问题?阅读有关参考资料
类作为
单元格
对象的容器有什么用途?您可以通过使用例如
std::数组
(可能是名为
Table
)的类型别名,而不是专用的
Table
类?我想返回
单元格&
是不安全的,可以在class@Mayur哈?如果它是
const
你就不能在上面调用
setContents
。我不明白你为什么认为它不“安全”,虽然我也不明白你为什么要编写不必要的样板文件。你的
表格
做了什么,而
std::array
做不到?@user463035818参考是
常量
,而不是
单元格
本身。我也不认为这个表格解决方案非常实用,我想回答OP的问题,为什么会出现这种情况ge并没有在他的特定代码中持久化。似乎通过副本/引用传递会让他感到困惑,所以我想特别解释一下。@user463035818您是对的。我再次删除了它。它在MSVC上起作用(但再次强调,这并不意味着太多…)。无论哪种方式,它现在都可以工作了。很抱歉造成混淆。@也许它必须是非常量的,否则您无法修改它。容器通常会返回对其元素的非常量引用。但您有疑问是对的。问题是:一旦您返回对成员的非常量引用,将该成员私有化是毫无意义的,您可以将其设为ppublic也是,在你的例子中,我看不出有任何问题。封装不是圣杯,如果你想允许从
表的外部直接修改
单元格
s,没有理由让它完全不可能