c++ - 是否可以从基类调用派生类函数

标签 c++ inheritance constructor virtual-functions

我需要澄清调用方法,我有一个基类,我尝试使用派生类对象从中调用派生类函数。可以吗

请告诉我这个senario中我的代码有什么问题

#include "stdafx.h"
#include <malloc.h>

class derived;

class base
{
public:
    base()
    {

    }
    ~base()
    {
    }

    void setdptr(derived* dptr)
    {
        m_dptr = dptr;
        dptr->sayHello();
    }

    virtual void addfunc()
    {

        printf("base class add");
    }

    derived *m_dptr;

};

class derived : public base
{
public:
    derived()
    {
    }
    ~derived ()
    {
    }

    void addfunc()
    {
        printf("derived class add");
    }

    void sayHello()
    {
            printf("Say Hello");
    }

    void setDeriveToBase()
    {
       setdptr(this);
    }

};

int _tmain(int argc, _TCHAR* argv[])
{
    derived dp;
    dp.setDeriveToBase();
    return 0;
}

最佳答案

base 类的 setdptr 函数中,您还没有定义完整的 derived 类,所以编译器还没有知道 derived 中有哪些成员。

setdptr 的实际定义 移到derived 的声明之后,它应该可以工作。

像这样:

class derived;

class base
{
    // ....

    void setdptr(derived* dptr);

    // ....
};

class derived : public base
{
    // ....
};

void base::setdptr(derived* dptr)
{
    m_dptr = dptr;
    dptr->sayHello();
}

关于c++ - 是否可以从基类调用派生类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10026220/

相关文章:

c++ - 在 C++ 中初始化对象之前声明一个对象

ios - Swift 中的子类不继承其父类(super class)的初始化程序

c# - 如何覆盖从构造函数调用的基类方法

javascript - 将函数直接分配给构造函数与原型(prototype)分配有什么区别,为什么?

c++ - Rcpp Armadillo : Using autoconf to disable OpenMP

c++ - 以旧方式迭代 C++ 中的对象指针数组(没有基于范围的 for)?

c++ - 在堆上创建对象需要对象的大小吗?

c++ - 如何在 switch 语句中正确初始化不同的派生类?

c++ - 构造函数中的初始化列表

c++ - POD 与非 POD 情况下生成的构造函数