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

时间:2018-10-15 16:43:14

标签: c++

我遇到如下问题:

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()

我不喜欢通过构造函数参数传递它,我想通过使用函数或直接访问来解决问题。 我知道如何通过简单继承进行访问,但这就像反向情况一样,我不知道。

2 个答案:

答案 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();