我遇到如下问题:
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;
}
我喜欢在static var
函数中访问该dosomething()
。
我不喜欢通过构造函数参数传递它,我想通过使用函数或直接访问来解决问题。 我知道如何通过简单继承进行访问,但这就像反向情况一样,我不知道。
答案 0 :(得分:0)
首先,static int var;
是private
,因此没有其他类(B
除外)可以访问它。因此,解决方案是:使其public
,为其实现getter / setter方法或将class A
标记为class B
的朋友。
第二,只需将class
拆分为头文件和实现文件即可解决此问题。
Base.h
#ifndef BASE__H
#define BASE__H
class base
{
public:
base() {}
};
#endif
A.h
#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
A.cpp
#include "A.h"
#include "B.h"
void A::dosomething()
{
B::var = 42;
}
答案 1 :(得分:-4)
向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();