【问题标题】:Use a child function in a parent class cpp在父类 cpp 中使用子函数
【发布时间】:2016-03-11 18:39:41
【问题描述】:

我有一个父类和一个子类,其中父类在父类方法之一中使用子类之一。在这种方法中,父使用子的构造函数和方法(即从父继承的虚拟方法),我在stackoeverflow上看到了另一个类似的问题,但他们没有使用子的使用方法和构造函数(一个人提到问题更容易,因为他们只使用子类的变量)。我在父级中尝试了一些基本的类转发(将子类放在顶部),但没有奏效。

这是一种没有任何公私区分的设置,试图解决所需的标头:

//foo.h
class Foo{
    int x;
    Foo(int i);
    virtual void funA ();
    void funB();
};

//foo.cpp
Foo::Foo(int i) {
   x = i;
}
Foo::funA(){cout<<"Foo funA"<<endl;}
Foo::funB(){
    Bar b = Bar();
    b.funA();
}

//bar.h
class Bar : public Foo {
    Bar(int i);
    virtual void funA ();
};

//bar.cpp
Bar::Bar(int i) { x = i };
void Bar::funA(){cout<<"Bar funA"<<endl;}

我似乎一直坚持让班级转发工作。如果有人能告诉我如何设置我的包含和类转发,那就太好了!

【问题讨论】:

  • 您遇到的实际问题是什么?除了在bar.h 中缺少#include "foo.h" 以及在cpp 文件中缺少头文件的包含,它看起来还可以。

标签: c++ inheritance forwarding


【解决方案1】:

Foo.h

class Foo {
    int x;
    Foo(int i);
    virtual void funA();
    void funB();
}

Foo.cpp

#include "Foo.h"
#include "Bar.h"

...
void Foo::funB() {
    Bar b();
    b.funA();
}
...

Bar.h 依赖于 Foo.h,但您不需要任何类的前向声明(例如,当您有像 class Foo; 这样没有定义类主体的行时),只需正常声明即可。这是因为Foo不被Bar的接口使用,只有它的实现,所以你的Bar.h文件可以保持不变。

【讨论】:

  • 谢谢,我想我只是跳进了前向声明。
猜你喜欢
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
相关资源
最近更新 更多