header 中的私有变量
Private Variable in header
我有一个 header 文件,里面有一个私有变量
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
};
我需要另一个 class 中 m_flag
的值。此 .cpp
具有声明变量的 header 文件。
我的疑问是我能否使用此 class 中的 m_flag
,例如
test.Report (m_flag )
还是我必须使用 GetFlag ()
对于你的问题"Can i use it from this class",答案一般是肯定的。当您说从 class 中使用它时,通常意味着您正试图从 class 中定义的函数之一访问该变量。例如:
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)
看起来您正试图调用另一个对象 test
的函数 Report
。
如果您从 class 外部调用它(即在不同的范围,文件中),您需要调用 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());
}
SetFlag 和 GetFlag 是通过 class 的实例访问 class 的私有成员的标准方法。
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是另外一个class实例(你不说是不是RoutingTableEntry的实例,虽然实际上并没有差异)并在尝试提供 RoutingTableEntry class.
的成员时调用名为 Report() 的方法
假设test是一个完全不同的实例化class,那么将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 class。然而,使这种情况不太可能发生的是,如果 Report 是 RoutingTableEntry class 的成员,那么它就不需要将 m_flag 作为参数它已经可以直接访问它了。
我有一个 header 文件,里面有一个私有变量
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
};
我需要另一个 class 中 m_flag
的值。此 .cpp
具有声明变量的 header 文件。
我的疑问是我能否使用此 class 中的 m_flag
,例如
test.Report (m_flag )
还是我必须使用 GetFlag ()
对于你的问题"Can i use it from this class",答案一般是肯定的。当您说从 class 中使用它时,通常意味着您正试图从 class 中定义的函数之一访问该变量。例如:
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)
看起来您正试图调用另一个对象 test
的函数 Report
。
如果您从 class 外部调用它(即在不同的范围,文件中),您需要调用 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());
}
SetFlag 和 GetFlag 是通过 class 的实例访问 class 的私有成员的标准方法。
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是另外一个class实例(你不说是不是RoutingTableEntry的实例,虽然实际上并没有差异)并在尝试提供 RoutingTableEntry class.
的成员时调用名为 Report() 的方法假设test是一个完全不同的实例化class,那么将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 class。然而,使这种情况不太可能发生的是,如果 Report 是 RoutingTableEntry class 的成员,那么它就不需要将 m_flag 作为参数它已经可以直接访问它了。