为什么静态数组成员变量在调用对象实例后没有显示任何内容? 目前正在研究C++中的面向对象编程,并且在一个实例上显示出与我创建的方法没有任何变化的问题。

为什么静态数组成员变量在调用对象实例后没有显示任何内容? 目前正在研究C++中的面向对象编程,并且在一个实例上显示出与我创建的方法没有任何变化的问题。,c++,oop,methods,static,constants,C++,Oop,Methods,Static,Constants,整个代码基于我从头文件创建的这个对象 #ifndef DEQUE_H_ #define DEQUE_H_ #include <iostream> const int CAPACITY = 5; const int DEFAULT = -1; class Deque { public: Deque(); int get_size() const; bool is_empty() const; bool is_full() const; i

整个代码基于我从头文件创建的这个对象

#ifndef DEQUE_H_
#define DEQUE_H_


#include <iostream>

const int CAPACITY = 5;
const int DEFAULT = -1;

class Deque
{
public:
    Deque();
    int get_size() const;
    bool is_empty() const;
    bool is_full() const;
    int operator[](int i) const;
    static Deque insert_tail(int);
private:
    int size_;
    static int array_[CAPACITY];
};

std::ostream & operator<<(std::ostream &, const Deque &);


#endif 
\ifndef DEQUE\H_
#定义DEQUE_H_
#包括
常数int容量=5;
const int DEFAULT=-1;
德克级
{
公众:
德克();
int get_size()常量;
bool是_empty()常量;
bool是_full()常量;
int运算符[](int i)常量;
静态德克插入_尾(int);
私人:
int-size_389;;
静态整数数组uu[CAPACITY];
};

std::ostream&operator代码的问题是对静态单词的误用。事实上,静态意味着与对象实例不关联:这意味着静态成员的内容(本例中的
数组
变量)在您将创建的每个实例之间共享

对于
insert\u tail
方法也是如此,即使不创建实例,也可以使用该方法。现在,让我们试着理解您在这个方法中写了什么:

Deque d;
d.size_ += 1;
int size = d.size_;
d.array_[size - 1] = x;
return d;
在第一行中,您创建了一个新的
Deque
对象。这是第一个错误,因为您没有修改实际的
Deque
。然后添加操作,最后返回创建的Deque。但是,此对象不会保存在任何位置,因为在调用
deque.insert_tail()
时,不会在任何位置分配返回值

让我们试着让这更具体一点

因为您所做的是创建一个数据结构,所以不需要任何静态成员。这是因为所有内容都需要保存在数据结构中

然后,在
insert_tail
中,您需要删除在其中创建的对象。它看起来像这样:

size_ += 1;
int size = size_;
array_[size - 1] = x;

通过这两个修改,代码可能会像预期的那样工作,但是,我建议您专注于改进代码的外观。在变量名的末尾使用下划线字符有点混乱。在C语言中,对于普通变量,唯一可以在名称
int-foo\u-bar
中使用它,对于保留变量,在开始时
int-foo
可以使用它。

静态成员的全部要点是它们与对象实例没有关联。我将insert\u-tail保持为静态,并在内部进行了以下更改。问题是我无法“访问”任何大小更改。这意味着静态成员的使用无效。具体是什么交易?您不必保持
insert\u tail
静态。事实上,在这种情况下,您根本不必使用
static
。我将函数的类型保留为Deque,并将其设置为const以访问所有私有属性。困扰我的是,访问.size_uu属性的唯一真正方法是从该对象创建一个新实例。即使有这么多的变化,什么也没有出现。真奇怪,我想出来了!对将函数用作“指针”,并使用*this指针引用对象!对既然你已经弄明白了,我想如果你用你为解决这个问题所做的事情编辑了你自己的帖子,或者如果你用这个解决方案发布了另一个答案,那就太好了。我很好奇你是怎么做到的!
Deque d;
d.size_ += 1;
int size = d.size_;
d.array_[size - 1] = x;
return d;
size_ += 1;
int size = size_;
array_[size - 1] = x;