[英]Class Forward Declaration C++
我正在遵循有关观察者模式的教程,遇到了以下问题。
即,我具有以下基类:
class Subject;
class Observer;
接下来,我想再定义两个类
class StockGrabber: public Subject {
//...
//the constructor involves a StockObserver object
StockGrabber(StockObserver so){....};
}
class StockObserver: public Observer {
//...
StockObserver(StockGrabber sg) {....};
}
有什么办法可以使用前向声明,使StockGrabber知道StockObserver存在吗? 考虑到它们的相互依赖性,我不能只交换两个类的位置。
我应该如何解决这个问题? (原始教程是用Java编写的,但是我正在尝试用C ++实现它)谢谢!
前向声明还不够,您必须对StockObserver :: StockGrabber(StockObserver so)成员函数的签名进行一些更改,因为如果通过值传递参数,则不仅需要参数类的声明,还需要定义。 如果通过引用传递,则声明足以声明该函数,但是该声明肯定不足以实现该函数,因此可能是您必须在StockObserver类定义之后在类外部定义函数。 看下面的代码,它会更容易理解。
class Subject{ /* ... */ };
class Observer{ /* ... */ };
class StockObserver;
class StockGrabber: public Subject {
//...
//the constructor involves a StockObserver object
StockGrabber(StockObserver& so); // class StockObserver is declared before StockGrabber::StockGrabber(StockObserver&).
};
class StockObserver: public Observer {
//...
StockObserver(StockGrabber sg) { /* ... */ };
};
StockGrabber::StockGrabber(StockObserver& so){ /* ... */ } // class StockObserver is defined before StockGrabber::StockGrabber(StockObserver&).
是的,您可以使用StockObserver
前向声明。 以下程序成功构建。
class Subject {};
class Observer {};
class StockObserver;
class StockGrabber: public Subject {
StockGrabber(StockObserver so);
};
class StockObserver: public Observer {
StockObserver(StockGrabber sg);
};
StockGrabber::StockGrabber(StockObserver so) {}
StockObserver::StockObserver(StockGrabber sg) {}
int main()
{
return 0;
}
尚不清楚您希望如何使用构造函数的参数。 使用构造函数的参数时会遇到挑战。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.