提问者:小点点

如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?


我正在编写一段代码,其中我需要将派生(子)类的对象作为参数传递到基(父)类的函数中。 我已经研究了很多已经提出的问题,但是所有的问题都是使用指针给出解决方案的。 (其中一些正在跟进)

将派生类传递到基函数

将派生类的对象传递到基类

将指向派生类中成员函数的指针强制转换为指向抽象成员函数的指针

对派生类的指针的基类引用

但我想问,是否有任何方法可以做到这一点,而不使用指针或引用。 这是我的密码。 请在上述背景下指导我。

class parent;
class child;

class parent{
    public:
        void demo(child c)
        {
            cout<<"Parent"<<endl;           
        }   
};

class child:public parent{
    public:
        void demoChild()
        {
            cout<<"Child"<<endl;
        }
};

int main()
{
    parent p;
    child c;
    p.demo(c);
    c.demo(c);
    
    return 0;
}

共1个答案

匿名用户

函数定义中的按值传递的参数不能是不完整的类型。 您只需要在类中delcare demo成员函数,并在child已经是完整类型的位置定义它:

class parent;
class child;

class parent
{
  public:
    void demo(child c); // incomplete type allowed in declaration
};

class child : public parent
{
  public:
    void demoChild()
    {
      std::cout << "Child" << std::endl;
    }
};

void parent::demo(child c) // child is a complete type here
{
  std::cout << "Parent" << std::endl;           
}   

现场演示:https://godbolt.org/z/7mnmc3

无论如何,如果您的代码不只是为了学习目的,我会猜测这是一个XY问题。