我想指定一个接口,它需要一个抽象类将某种类型作为成员变量。
我将尝试在这里复制这种情况:
class Blob {
int data[32];
};
class Worker {
string name;
abstract void workOn(Blob&) = 0;
}
class Abstract {
vector<shared_ptr<W>> workerList;
Blob allTheStuff;
abstract void somethingElse() = 0;
void doAllTheWork() {
for (w : workerList) {
w->workOn(allTheStuff);
}
}
};
class B_Blob : public Blob {
int moreData[4096];
};
class BulbasaurTrainingCamp : public Abstract {
B_Blob allTheStuff;
void somethingElse() {} // implemented
// this class will accept Bulbasaurs into workerList
};
class Bulbasaur : Worker {
Bulbasaur(): name("Fushigidane") {}
void workOn(Blob& b) {
// bulbasaurs cover *all* their workspace with crap
for (int i=0; i<sizeof(b.data[0])/sizeof(b.data); ++i) {
b.data[i] = *((int*)&("crap"));
}
for (i=0; i<sizeof(b.moreData[0])/sizeof(b.moreData); ++i) {
b.moreData[i] = *((int*)&("crap"));
}
}
在这里,抽象的 bas 类有一个Blob
,但 的实例BulbasaurTrainingCamp
有一个派生的B_Blob
。看来,由于我给了它相同的名称,编译器接受了它。
有这个名字吗?我想知道的是当我这样做时的行为是什么。我是否用 覆盖Blob
了B_Blob
?
我基本上不确定Blob
在BulbasaurTrainingCamp
. 我的期望是每个Bulbasaur
将crap
在B_Blob
. 我希望 C++ 会真正做看似明智的事情。这是一个例子,“它可以编译,所以我认为我应该很高兴,但我仍然不能完全确定它正在做我认为应该做的事情”。