【发布时间】:2020-01-02 18:06:25
【问题描述】:
我希望 C++ 类中的属性是来自特定类继承的未实例化类。然后,这个类 heirachy 的所有成员都将实现相同的方法,这意味着我可以实例化该对象,然后在情况需要时使用该方法。这是一些代码(不能编译),展示了我的意思:
#include <iostream>
using namespace std;
class Event {
public:
Event() = default;
virtual void go() = 0;
};
class EventA : Event {
public:
EventA() = default;
void go(){
cout << "Running event A"<< endl;
}
};
class EventB : Event {
public:
EventB() = default;
void go(){
cout << "Running event B"<< endl;
}
};
class Situation{
private:
Event* current_event = &EventA; //Problematic code: EventA does not refer to a value
public:
Situation() = default;
void setEvent(Event* event){
current_event = event;
}
void runEvent(){
current_event.go();
}
};
int main() {
Situation situation;
situation.runEvent();
situation.setEvent(&EventB);
situation.runEvent();
return 0;
};
【问题讨论】:
-
您似乎对对象和类型之间的区别感到困惑。 C++ 类型不是对象,也没有地址。
-
您可能想要创建一个
EventA的实例,它是类Situation的静态成员,并将其命名为EventStub,然后设置current_event = &EventStub; -
好的,这很有帮助。所以我不能像变量一样传递类以在以后实例化和使用。 @franji1 这适用于该代码的多态性方面吗?我可以使用
static EventA eventStub; EventA* current_event = &eventStub;,但不能使用Event* current_event = &eventStub; -
另外,
class EventB : Event是 私有继承,这意味着EventB类之外的任何代码都不允许知道 EventB 继承自 Event。使用class EventB : public Event。
标签: c++ oop function-pointers