추상 클래스가 특정 유형을 멤버 변수로 갖도록 요구하는 인터페이스를 지정하려고합니다. 여기기본 클래스의 추상 기본 변수
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
은 B_Blob
의 두 멤버 변수에 걸쳐 crap
의 16512 (16384 아님) 바이트를 씁니다. 나는 C++이 실제적으로 합리적인 것으로 보이는 것을하기를 바라고 있습니다. 그것은 "내가 행복해 져야한다고 생각하기 때문에 컴파일된다. 그러나 나는 여전히 그것이해야한다고 생각하는 것을 완전히 확신하지 못한다"는 경우이다.
C++ 코드에서 '추상적'을 사용할 수 있다는 것을 알지 못했습니다. –
나는 몰라. 어쩌면 빠져 나갈 수 있을까요? 나는 항상 클래스가 인스턴스화 될 수 없다는 신호를 보내 왔습니다. –
@ DietmarKühl 뉴스 또한 "이것은 .NET 프레임 워크의 C++/CLI 언어 구체화의 일부로 도입 된 키워드입니다." http://stackoverflow.com/questions/1298093/can-i-use-abstract-keyword-in-c-class –