如何在复杂继承中访问静态成员变量

how to access static member variables in complex inheritance

本文关键字:访问 静态成员 变量 继承 复杂      更新时间:2023-10-16

>我有一个如下问题:

class base
{
public:
base() {}
};
class A : public base
{
public:
A() {}
void dosomething()
{
// here I want to access the static var created inside class B
}
};
class B
{
public:
B() {}
private:
A base;
static int var;
};
int main()
{
B b;
return 0;
}

我喜欢在函数dosomething()访问该static var

我不喜欢通过构造函数参数传递它,我希望通过使用函数或直接访问来解决问题。 我知道如何在简单继承中访问,但这就像相反的情况,我不知道。

首先,static int var;private的,因此没有其他类(除了B(可以访问它。因此,解决方案是:使其public,为其实现getter/setter方法,或将class A标记为class B的朋友。

其次,只需将class拆分为标头和实现文件即可解决此问题。

基数.h

#ifndef BASE__H
#define BASE__H
class base
{
public:
base() {}
};
#endif

#ifndef A__H
#define A__H
#include "base.h"
class A : public base
{
public:
A() {}
void dosomething();
};
#endif

B.h

#ifndef B__H
#define B__H
#include "A.h"
class B
{
public:
B() {}
private:
A base;
static int var;
friend class A;
};
#endif

答.cpp

#include "A.h"
#include "B.h"
void A::dosomething()
{
B::var = 42;
}

向 B 添加一个静态公共成员函数以访问 var 并在需要时访问它。

class base
{
public:
base() {}
};
class B
{
public:
B() {}
static void setVar(int value) { var = value; }
static int getVar() { return var; }
private:
static int var;
};
class A : public base
{
public:
A() {}
int dosomething()
{
return B::getVar();
}
};
int main()
{
B b;
return 0;
}

上述解决方案已成功编译。 (共享的、可访问的(对有四种组合。 -public static变量在类外共享和访问 -private static变量是共享的,但在类外部无法访问 -public非静态变量不是共享的,而是可以在类外访问的 -private非静态变量既不能在类外共享,也不能访问

请注意,处理私有静态value的方式可以按照使用非静态val的方式建模,即通过给你的类用户一些公共成员函数来处理静态变量:

class Sample {
...
public:
static int getvalue() { return value; }
};

现在您可以像这样打印它:

cout << "static value = " << Sample::getvalue();