सी ++ में एक अमूर्त वर्ग को कैसे बनाएं, जिसमें कुछ सार तत्वों के साथ मैं एक सबक्लास में ओवरराइड करना चाहता हूं? .h
फ़ाइल को कैसे दिखाना चाहिए? क्या .cpp
है, यदि ऐसा है तो इसे कैसे दिखाना चाहिए?सी ++: अमूर्त विधि के साथ अमूर्त वर्ग बनाएं और उप-वर्ग में विधि को ओवरराइड करें
जावा में यह इस तरह दिखेगा:
abstract class GameObject
{
public abstract void update();
public abstract void paint(Graphics g);
}
class Player extends GameObject
{
@Override
public void update()
{
// ...
}
@Override
public void paint(Graphics g)
{
// ...
}
}
// In my game loop:
List<GameObject> objects = new ArrayList<GameObject>();
for (int i = 0; i < objects.size(); i++)
{
objects.get(i).update();
}
for (int i = 0; i < objects.size(); i++)
{
objects.get(i).paint(g);
}
सी के लिए इस कोड का अनुवाद ++ मेरे लिए काफी है।
संपादित करें:
मैं कोड बनाया है, लेकिन मैं त्रुटि निम्न मिल जब मैं वस्तुओं से अधिक पुनरावृति करने की कोशिश:
Game.cpp:17: error: cannot allocate an object of abstract type ‘GameObject’
GameObject.h:13: note: because the following virtual functions are pure within ‘GameObject’:
GameObject.h:18: note: virtual void GameObject::Update()
GameObject.h:19: note: virtual void GameObject::Render(SDL_Surface*)
Game.cpp:17: error: cannot allocate an object of abstract type ‘GameObject’
GameObject.h:13: note: since type ‘GameObject’ has pure virtual functions
Game.cpp:17: error: cannot declare variable ‘go’ to be of abstract type ‘GameObject’
GameObject.h:13: note: since type ‘GameObject’ has pure virtual functions
इस कोड के साथ:
vector<GameObject> gameObjects;
for (int i = 0; i < gameObjects.size(); i++) {
GameObject go = (GameObject) gameObjects.at(i);
go.Update();
}
आपका "मेरे गेम लूप में" कोड है ... अपूर्ण, सर्वोत्तम रूप से। 'ऑब्जेक्ट्स' क्या है? यदि आपके पास पहले से कोई नहीं है, तो मैं दृढ़ता से अनुशंसा करता हूं कि शुरुआती किताबों में से एक [परिभाषित सी ++ पुस्तक गाइड और सूची] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide -और-सूची)। –
आप हर्ब सटर के लेख, [वर्चुअल] (http://www.gotw.ca/publications/mill18) से भी परामर्श ले सकते हैं।एचटीएम), जो सी ++ में आभासी कार्यों और विरासत का उपयोग करते समय कई सर्वोत्तम प्रथाओं पर चर्चा करता है। –