如何在复杂继承中访问静态成员变量
how to access static member variables in complex inheritance
>我有一个如下问题:
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();
相关文章:
- 如何在复杂继承中访问静态成员变量
- 如何在类内部使用和访问静态指针到成员值s_ptm?
- decltype:使用指针访问类的静态成员
- 是否通过单元化指针UB访问静态类成员
- 将对象数限制为1可以使用点运算符访问静态成员的1
- 多态性:通过类文本或对象访问静态成员
- 从另一个类访问静态成员函数
- 无法访问静态成员函数C++
- 从外部访问静态成员并通过继承 c++ 访问静态成员
- 通过非静态方法访问静态成员
- 如何在没有对象的情况下访问静态成员 (C++)
- 为什么链接器在内联构造函数中访问静态成员时失败
- 我可以在没有任何前向声明的类/结构上访问静态成员函数吗?
- 访问静态成员函数中的非静态成员的解决方法
- Visual C++ 使用成员选择运算符(. 或 –>)访问静态成员函数
- 使用boost::shared_ptr访问静态成员变量
- 非静态成员函数是否可以访问静态成员函数或数据
- 在c++中显式访问静态成员方法中的静态成员变量
- 无法访问静态成员 ->未解析的外部符号 i
- 通过运算符 [] 访问静态成员unordered_map