相关疑难解决方法(0)

我可以从派生类中的静态函数访问基类受保护的成员吗?

我有一个程序,我需要在dll和一些应用程序代码之间共享一个基类.然后我有两个不同的派生类,一个在主应用程序的dll中.其中每个都有一些静态成员函数,它们对nase类中的数据进行操作.(它们需要是静态的,因为在其他地方用作函数指针).最简单的形式我的问题如下所示.

class Base {
protected:
  int var ;
};

class Derived : public Base {
  static bool Process( Base *pBase ) {
    pBase->var = 2;
    return true;
  }
};
Run Code Online (Sandbox Code Playgroud)

我的编译器抱怨我无法访问pBase的受保护成员,即使Derived已经保护对Base的访问权限.有什么方法可以解决这个问题,还是我误解了什么?我可以将Base变量公开,但这会很糟糕,因为在我的实例中,这些是分配的内存块和信号量来保护它以进行多线程处理.

救命?

c++ static derived access-specifier

19
推荐指数
1
解决办法
6770
查看次数

具有多态性的多重保护继承

我有一个关于受保护函数和多态的多重继承的问题.描述它很难,所以我希望它足够清楚.

说我有三个班:

class baseClass
{
 protected:
    virtual int function() = 0;
}; 


class derived_A:public baseClass
{
  int function()
    {
      //implementation 1
    };
};


class derived_B:public baseClass
{
   int function()
     {
       //implementation 2
     };
 };


class derived_C:public derived_A, public derived_B
{
  baseClass ** p_arr; //array of pointers of baseClass kind (polymorphism)
  int x=0;

  for (int i=0; i<arraySize; i++) // array size = many classes like derived_A, derived_B...
  {
     x = p_arr[i]->function(); //I already have function that builds this array
                               //it is …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance protected

6
推荐指数
1
解决办法
884
查看次数

将getter和setter用于不同的编程语言

所以我知道有很多关于getter和setter的问题,但我找不到与我的问题完全相同的东西.我想知道人们是否根据不同的语言改变了get/set的使用.我开始学习C++,并被教导使用getter和setter.这就是我的理解:

在C++(和Java?)中,变量可以是公共的也可以是私有的,但我们不能混合使用.例如,我不能拥有一个只能在类中更改的只读变量.它可以全部公开(可以读取和更改),也可以全部是私有的(无法读取,只能在课堂内更改).由于这个(以及可能的其他原因),我们使用getter和setter.

在MATLAB中,我可以控制变量的"setaccess"和"getaccess"属性,这样我就可以将事物设为只读(可以直接访问属性,但不能覆盖它).在这种情况下,我不觉得我需要一个getter因为我可以做class.property.

此外,在Python中,它被认为是"Pythonic",不使用getter/setter,只在需要时才将东西放入属性中.我真的不明白为什么在Python中使用所有公共变量都可以,因为这与我在使用C++时所学到的相反.

我只是好奇其他人的想法是什么.你会为所有语言使用getter和setter吗?您是否只将它用于C++/Java并在MATLAB和Python中直接访问(这是我目前正在做的)?第二种选择被认为是不好的吗?就我的目的而言,我只是指简单的getter和setter(只返回/设置值,不做任何其他事情).

谢谢!

c++ python getter setter matlab

5
推荐指数
2
解决办法
1613
查看次数

访问模板参数的受保护成员

我有一个模板类,我需要访问模板参数的受保护成员函数,如下所示:

class Foo
{
protected:
    void foo() {}
};

template<typename T>
class Bar
{
public:
    static void bar(T& self){self.foo();}
};
...
Foo f;
Bar<Foo>::bar(f);
Run Code Online (Sandbox Code Playgroud)

我的问题是访问受保护的方法.我尝试将一个friend class T进入Bar,但在c ++中似乎不允许这样做(编辑:并且无论如何都不会解决我的问题,所以它似乎).我试过让Bar继承自T(template<typename T> class Bar: public T(本来可以使用私有继承,但Bar的公共接口并不是非常重要,因为类本身只是内部的)),但这不允许访问foo()任何一个.那么我该如何访问该foo()方法?

编辑: Foo不应该知道Bar<Foo>,因为有很多Bar类.然而,我可以对Foo进行其他更改(当然不改变公共接口).

c++ templates visibility

0
推荐指数
1
解决办法
1609
查看次数