c++ - 如何使用`this`访问类数组中的成员变量
Posted
技术标签:
【中文标题】c++ - 如何使用`this`访问类数组中的成员变量【英文标题】:c++ - How to use `this` to access member variables in an array of classes 【发布时间】:2014-02-18 00:30:02 【问题描述】:给定一个具有各种成员数据值和静态 int 计数器的 C++ 类,我想要一个 clear()
函数,它可以遍历这些类对象数组的所有元素,清除它们的数据成员。
因此,例如,一个看起来像这样并保存芯片版本信息的类(是的,我知道我可能需要更多的 setter 和 getter):
class __STA_version_t
public:
__STA_version_t() count++; ;
~__STA_version_t() ;
void setVerString( char* x ) strncpy( verString, x, sizeof(verString)); verString[sizeof(verString)-1] = 0
void clearVerString() memset( verString, 0x0, sizeof(verString) );
char* getVerString() return verString;
bool hasVersion() return verString[0];
void clear()
for ( int i = 0; i < count; i++ )
// what goes here?
private:
static int count; // how many of these objects exist, need to know for clear().
char verString[20]; // station version as a string
UINT8 major_ver; // major version identifier (3 bits)
UINT8 minor_ver; // minor version identifier (6 bits)
UINT8 revision; // revision identifier (4 bits)
UINT8 chip_ident; // target chip identifier (3 bits)
;
因此在其他地方初始化count
:
__STA_version_t::count = 0;
现在,创建一个对象数组:
__STA_version_t versions[10];
首先,检查一下,实例化后 count 应该等于 10,对吧?
在clear()
函数中,我想说的是:
this[i]->clearVerString();
this[j]->revision = 0;
// etc.
清除数组中每个元素的每个数据成员。
这可以工作吗?怎么样?
【问题讨论】:
只使用 std::vector 有什么问题<__sta_version_t>? 此外,如果您的代码不是玩具程序,静态计数很少会按照您希望的方式工作。您在程序运行期间发生了临时、复制等情况,并且该“计数”成员可能具有您没想到的值。 必须调查一下。指针?而且,不,它的目的是用于商业用途。 【参考方案1】:问题是该类无法看到其边界之外并且容器位于该类的边界之外。
您应该使用标准容器。使clear
方法清除类中的数据成员。
标准容器具有确定物品数量的方法。
见std::vector
、std::list
、std::map
等
【讨论】:
同上我对@Ozraptor 的评论【参考方案2】:您正在尝试做的不是非常“面向对象”的 IMO。我认为您在这里尝试实现的类clear()
成员函数应该只清除调用它的实例化对象的数据。您要做的是通过仅在其中任何一个/一个上调用 clear()
来清除类的 所有 实例中的数据?
这里更好的方法是将您的对象存储在std::vector<__STA_version_t>
中,然后在您的类上编写一个静态函数,该函数将向量作为参数(理想情况下),或者可以以某种方式全局访问它,可能称为@ 987654324@。让该函数遍历向量并在向量中的每个对象上调用clear()
。然后 clear()
函数将简单地调用 clearVerString()
等自身 - 例如:
this->clearVerString();
this->revision = 0;
等等(请注意,如果您不想使用 this
指针,您实际上不需要使用)。
【讨论】:
你说的很对。昨晚我越想这件事,我的脑袋就越错。我怀疑今天早上我能想出一个更好的设计。以上是关于c++ - 如何使用`this`访问类数组中的成员变量的主要内容,如果未能解决你的问题,请参考以下文章