这样访问父类是否正确?

时间:2014-02-28 08:42:03

标签: c++ visual-c++

我正在尝试在c ++中使用子类。

我对使用它有一些疑问。

  1. 如何调用父的initProcess方法?

  2. 如何打印父级的实例地址?

  3. =====================以下是ClassA(父类)=================== ========

       class ClassA 
        {
        public:
            ClassA();
            ~ClassA();
            void ClassA::initProcess();
        };
    
        ClassA::ClassA(){}
        ClassA::~ClassA(){}
    
        void ClassA::initProcess()
        {
        }
    

    =================以下是ClassA的子类ClassB ================

    class ClassB : public ClassA
    {
    public:
        ClassB();
        ~ClassB();
    
        void ClassB::initProcess();
    };
    
    ClassB::ClassB(){}
    ClassB::~ClassB(){}
    
    void ClassB::initProcess()
    {
        ClassA::initProcess();  // <-- Is this correct to access ClassB's parent method?
        printf("ClassA is : %d", ClassA???); // <-- How to print parent's instance (ClassA) address?
    }
    

2 个答案:

答案 0 :(得分:0)

  

ClassA的:: initProcess(); //&lt; - 访问ClassB是否正确   父方法?

是的,这是调用基类方法initProcess()的正确方法。

printf("ClassA is : %d", ClassA???); // <-- How to print parent's instance (ClassA) address?

我认为代码行应该是这样的:

printf("ClassA is : %p", dynamic_cast<ClassA*>(this));

但是,你为什么要这样做?

答案 1 :(得分:0)

ClassA::initProcess();  // <-- Is this correct to access ClassB's parent method?

这是调用基类的正确方法。

  

如何打印父实例(ClassA)地址?

基类的实例是子类的实例。这里有一些工作代码来说明这一点。

#include <cstdio>

class ClassA 
    {
    public:
        ClassA();
        ~ClassA();
        void initProcess();
    };

ClassA::ClassA(){}
ClassA::~ClassA(){}

void ClassA::initProcess()
{
    printf("Class A address: %d\n", dynamic_cast<ClassA*>(this));
}

class ClassB : public ClassA
{
public:
    ClassB();
    ~ClassB();

    void initProcess();
};

ClassB::ClassB(){}
ClassB::~ClassB(){}

void ClassB::initProcess()
{
    ClassA::initProcess(); 
    printf("Class B address: %d\n", this);
}

int main()
{
    ClassB b;
    b.initProcess();
    return 0;
}

See this code in action