Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Интерфейс для персонажей


Автор: Bogdan1024 28.6.2006, 14:17
Хочу сделать кучу персонажей с разными классами так, чтобы можно было хранить ссылки на объекты персонажей в одном массиве и потом просто поочерёдно их оттуда извлекать и обращаться с ними по какому-то общему для них всех интерфейсу чтобы мне было всё равно какой у них класс. Как это реализовать на с++? 

Автор: Xenon 28.6.2006, 16:07
Ну, я так понимаю, сделать какой-то базовый класс, от него наплодить классов перссонажей конкретезированных уже.
Затем создавать массив указателей на объекты типа базовой класса.
Код

class base {};
class character:public base {};
base* pTr[100];

А дальше
Код

ptr[0]=new character; //создадим персонажа
ptr->deploy(); //что угодно кароче
  

Автор: NextAlex 28.6.2006, 16:29
Например так:

Код

Base.h

class Base{
protected:
int ID;
public:
Base(){
ID = 0;
}

virtual void func1(){}

virtual int func2(double arg){}

void setID(int id){
this->ID = id;
}

int getID(){
return this ID;
}

};


Obgect1.h
#include "Base.h"

class Object1:public Base{
public:
Object1(int id){
this->setID(id);
}

void func1(){
printf("functin 1. ID = %i \n", this->ID);
}

int func2(double arg){
printf("functin 2. ID = %i, arg = %d \n", this->ID, arg);
return this->ID + 10;
}

void 
};


main.cpp

#include "Base.h"
#include "Object1.h"


int main(int argc, char* argv[]){
Object1 ob(32);
Base* base = &ob;

base->func1();
ob.setID(base->func2((double)ob.getID()));
ob.func1();
ob.func2(251.2);

return 0;
}

ну и дальше в том же духе smile
В общем делаешь базовый класс, в котором объявляешь базовые функции, единые для всех персонажей, а классы персонажей - потомками своего базового класса. Код набирал прямо здесь посему за работоспособность smile не ручаюсь, но общий смысл думаю уловишь. А вообще почитай про родителей,потомков и виртуальные функции. Кстати здесь это уже не раз проскакивало. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)