另一个类的共享类及其在C ++中的父类

时间:2014-12-15 07:16:08

标签: c++

我需要从另一个类(DerivedClass)及其父类(BaseClass)访问一些共享类。这是我的想法:

class BaseClass {
public:
    virtual SharedClass *sharedClass; // Error! Virtual cannot use for non-static vars
    void callFromBaseClass() {
        sharedClass.testFunc(); 
        // I need an access to sharedClass here too as well as in the DerivedClass
    }
};

class DerivedClass : public BaseClass {
public:
    SharedClass *sharedClass;
    DerivedClass( SharedClass *sharedClass ) {
        this->sharedClass = sharedClass;
    }
    void callFromDerivedClass() {
        sharedClass.testFunc();
    }
};

使用它:

SharedClass sharedClass;
DerivedClass derivedClass( &sharedClass );

我认为我可以使用virtual作为指向类的指针,但我在那里得到错误:'virtual'只能出现在非静态成员函数中。 所以我不知道如何访问sharedClass的功能。你有什么想法吗?

2 个答案:

答案 0 :(得分:4)

关键字virtual用于允许派生类提供自己的给定函数实现。

您正在寻找数据的基本继承。始终完成此操作,并使用可见性修饰符控制访问。您使用了public:(对所有人都可见),但也有proctected:(仅对类及其子类可见)和private:

如果其他类可见,则其他人可以使用类中的任何常规变量。在另一个类中,不应重复对象声明(因为它将通过具有相同的名称来隐藏您正在寻找的那个)。

因此,如果您从DerivedClass课程中删除声明,则可以使用BaseClass中的声明。

导致以下结果:

class BaseClass {
protected:
    SharedClass *sharedClass; // No virtual
public:
    BaseClass( SharedClass *sharedClass ) {
        this->sharedClass = sharedClass;
    }
    void callFromBaseClass() {
        sharedClass->testFunc(); 
        // I need an access to sharedClass here too as well as in the DerivedClass
    }
};

class DerivedClass : public BaseClass {
public:
    // No declaration of sharedClass
    DerivedClass( SharedClass *sharedClass )
          :BaseClass(sharedClass)   // Pass the shared class to the base class.
    {

    }
    void callFromDerivedClass() {
        // Shared class is visible here because it is in the base class with visibility protected.
        sharedClass->testFunc();
    }
};

请注意,当变量是公共的时,这将起作用,但最好尽可能地限制范围,因此受保护在这里更为可靠。

答案 1 :(得分:2)

SharedClass * sharedClass;在具有公共可见性的基类中,足以从Base类和Derived

调用Shared类方法