c ++,在Child类中,如何在没有对象的情况下访问Parent类的方法?

时间:2018-10-30 01:10:03

标签: c++ inheritance static

我认为只有静态方法可以执行以下操作,但是可以使用。 谁能告诉我它是如何工作的?这东西的原理是什么?

#include <iostream>
using namespace std;

class Parent {
protected:
    unsigned char* buf;
    unsigned int bufLenght;

public:
     void Setup()
    {
        buf = nullptr;
        bufLenght = 0;
        cout << "in Parent class Setup()" << endl;
    }
    virtual void TearDown() 
    {
        delete[] buf;
    }
};

class Child : public Parent{
public:
    virtual void Setup()
    {
        Parent::Setup();    // access Parent method without a parent's object?
        cout << "in Child class Setup()" << endl;
    }
};

int main(int argc, char const *argv[])
{
    Child co;
    co.Setup();

    return 0;
}

运行此代码,结果是:

  

在父类Setup()中

     

在子类Setup()

2 个答案:

答案 0 :(得分:1)

每个Child对象都建立在Parent对象的顶部。每当您有Child时,您也会有Parent

答案 1 :(得分:0)

我似乎无法理解您要达到的目标。看来您已经忽略了要覆盖的基类方法上的'virtual'关键字,因此从编译器中收到错误。

尽管您的问题还不清楚,但这是我最大的尝试来演示如何在C ++中实现多态性:

class A {
protected:
    // You will not be able to access this in the
    // other class unless you explicitly declare it as
    // a 'friend' class.
    int m_ProtectedVariable;

public:
    // Let's define a virtual function that we can
    // override in another class.
    virtual void ClassMethod( ) {
        printf( "[A::ClassMethod] Called!\n" );
    }
}

class B : public A {
public:
    // There is no need for the virtual/override keywords
    // if you are overloading the function which is already defined
    // in another class as 'virtual'. I prefer to keep them for
    // pedantic reasons.
    /* virtual */ void ClassMethod( ) /* override */ {
        // 
        printf( "[B::ClassMethod] Called!\n" );

        // Since the function is a virtual, we can always
        // call the base class function.
        A::ClassMethod( /* ... */ );
    }
}

希望您发现这对您要实现的目标有帮助:-)

编辑:在您的特定情况下,您应该在需要时分配一个缓冲区,然后再销毁它-为什么不利用类构造函数/析构函数的功能? 让编译器决定何时管理内存(在这种情况下)会更加直观,因为一旦对象超出范围,内存就会自动发生。