我有一个程序,我需要在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变量公开,但这会很糟糕,因为在我的实例中,这些是分配的内存块和信号量来保护它以进行多线程处理.
救命?
我有一个关于受保护函数和多态的多重继承的问题.描述它很难,所以我希望它足够清楚.
说我有三个班:
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) 所以我知道有很多关于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(只返回/设置值,不做任何其他事情).
谢谢!
我有一个模板类,我需要访问模板参数的受保护成员函数,如下所示:
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++ ×4
derived ×1
getter ×1
inheritance ×1
matlab ×1
polymorphism ×1
protected ×1
python ×1
setter ×1
static ×1
templates ×1
visibility ×1