21xrx.com
2024-12-22 20:57:56 Sunday
登录
文章检索 我的文章 写文章
C++中如何在父类中调用子类结构体?
2023-06-27 22:44:21 深夜i     --     --
C++ 父类 子类 结构体 调用

在C++中,继承是一种非常重要的机制,它允许我们创建一个新的类,这个类可以继承自一个已有的类,这个已有的类称为父类或基类,在新的类中我们可以定义新的成员变量和成员函数,并且还可以使用父类中定义的成员变量和成员函数。在某些情况下,在父类中需要使用子类中定义的结构体,那么应该如何操作呢?

首先,我们需要明确一个概念,即父类是无法直接调用子类中的任何成员的,包括结构体。这是因为在编译时,父类是不知道具体的子类类型的。但是,我们可以使用虚函数和指针来解决这个问题。具体来说,我们可以在父类中定义一个虚函数,然后在子类中重写这个虚函数,并将子类中定义的结构体作为参数传递给这个虚函数。

以下是一个示例代码:


#include <iostream>

using namespace std;

struct MyStruct

  int num;

;

class Parent {

public:

  virtual void printStruct(MyStruct s)

    cout << "Parent prints " << s.num << endl;

  

};

class Child : public Parent {

public:

  void printStruct(MyStruct s) override

    cout << "Child prints " << s.num << endl;

  

};

int main() {

  MyStruct s { 10 };

  Parent* p = new Child();

  p->printStruct(s);

  delete p;

  return 0;

}

在上面的代码中,我们首先定义了一个名为MyStruct的结构体,然后定义了一个名为Parent的父类,其中定义了一个名为printStruct的虚函数,这个函数接受一个MyStruct类型的参数。接着,我们定义了一个名为Child的子类,重写了父类中的printStruct函数,并在函数中打印了一个句子和MyStruct类型参数中的num成员。

在main函数中,我们首先创建一个MyStruct类型的变量s,然后创建了一个Parent类的指针p,并将p指向一个Child类的实例。最后,我们调用p的printStruct函数,并将s作为参数传递给这个函数。

运行这段代码,我们可以看到输出是:“Child prints 10”,这表明父类中的虚函数确实调用了子类中的结构体。这种用法不仅可以让父类使用子类中的结构体,还可以让父类使用子类中定义的其他成员,这是非常有用的机制。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复