我有一个头文件,其中有一个私有变量
class RoutingTableEntry
{
public:
void SetFlag (RouteFlags flag) { m_flag = flag; }
RouteFlags GetFlag () const { return m_flag; }
private:
RouteFlags m_flag;
}
enum RouteFlags
{
VALID = 0, //!< VALID
INVALID = 1, //!< INVALID
IN_SEARCH = 2, //!< IN_SEARCH
};
我需要另一个班级m_flag
的值。此.cpp
具有声明变量的头文件。
我怀疑是否可以使用此类中的m_flag
,例如
test.Report (m_flag )
或者我必须使用GetFlag ()
答案 0 :(得分:2)
对于您的问题&#34;我是否可以在此课程中使用它&#34; ,答案通常是肯定的。当你说从这个类中使用它时,通常意味着你试图从类中定义的函数之一访问该变量。例如:
class RoutingTableEntry
{
public:
void SetFlag (RouteFlags flag) { m_flag = flag; }
RouteFlags GetFlag () const { return m_flag; }
int anotherFunction() {
//this is valid
test.Report(m_flag) };
}
private:
RouteFlags m_flag;
TestObject test;
}
但是您的示例代码test.Report(m_flag)
看起来像是在尝试调用函数报告不同的对象测试。
如果从类外部(即在不同的范围,文件中)调用它,则需要调用GetFlag
,因为变量m_flag是私有成员,并且只能通过RoutingTableEntry
的函数访问
class RoutingTableEntry
{
public:
void SetFlag (RouteFlags flag) { m_flag = flag; }
RouteFlags GetFlag () const { return m_flag; }
private:
RouteFlags m_flag;
}
//code in main
main() {
RouteFlags r1,r2;
TestObject test;
//this is invalid.
test.Report(m_flag)
//this is valid
test.Report(r1.GetFlag());
}
答案 1 :(得分:0)
SetFlag和GetFlag是通过该类的实例访问类的私有成员的标准方法。
class RoutingTableEntry
{
public:
void SetFlag (RouteFlags flag) { m_flag = flag; }
RouteFlags GetFlag () const { return m_flag; }
private:
RouteFlags m_flag;
}
从您提供的示例的外观来看:
test.Report(m_flag);
上面的内容暗示 test 是另一个类实例(尽管实际上并没有什么不同,但您不说它是否是RoutingTableEntry的实例),并且正在调用称为在尝试提供RoutingTableEntry类的成员时使用Report()。
假设 test 是一个完全不同的实例化类,然后将 m_flag 传递给该实例将需要您拥有一个RoutingTableEntry实例来进行操作并调用适当的方法来获取 m_flag 值。因此,您将得到以下结果:
class RoutingTableEntry
{
public:
void SetFlag (RouteFlags flag) { m_flag = flag; }
RouteFlags GetFlag () const { return m_flag; }
private:
RouteFlags m_flag;
};
class MyOtherClass
{
public:
void Report(RouteFlags flags) { ... }
};
RoutingTableEntry entry;
MyOtherClass test;
test.Report(entry.GetFlag());
由于您尚未真正提供足够的信息来回答问题,因此我将尝试猜测您可能还意味着什么。如果要使用 m_flag 而不需要调用GetFlag()访问器方法,则Report()方法将需要成为RoutingTableEntry类的成员。但是,这使得不太可能的是,如果Report是RoutingTableEntry类的成员,则它不必将 m_flag 作为参数,因为它可以直接访问它。