我有一个父类和一个子类,其中父类使用其中一个父方法中的一个子类。在这个方法中,父对象使用了构造函数和子对象的方法(从父对象继承的虚方法),我在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;}
我似乎无法让班级转发工作。如果有人可以告诉我如何设置我的包含和课程前进,这将是伟大的!
答案 0 :(得分:1)
class Foo {
int x;
Foo(int i);
virtual void funA();
void funB();
}
#include "Foo.h"
#include "Bar.h"
...
void Foo::funB() {
Bar b();
b.funA();
}
...
Bar.h
依赖于Foo.h
,但您不需要任何类别的前向声明(例如,如果您有像class Foo;
这样的行没有定义一个类体),只是普通的声明。这是因为Foo
的界面不使用Bar
,只是其实现,因此您的Bar.h
文件可以保持不变。