webForumDet fria alternativet

Dynamiska variabelnamn

8 svar · 310 visningar · startad av pettsson

pettssonMedlem sedan jan. 20021 122 inlägg
#1

Skulle vilja skapa ett antal instanser av en klass beroende på användarinformation. Nåt i stilen med

for(int i = 0; i < Variabel; i++)
{
klass "namn + i";
}

Men det funkar ju inte riktigt :(

Några förslag?

PeWMedlem sedan juni 200010 432 inlägg
#2

Varför denna strategi?

Om du vill skapa en massa instanser av ett objekt är det annars lätt att se till att varje objekt håller ett unikt ID (dvs "i") som initieras genom konstruktorn. En annan variant är att göra en samling av instanser och låta "i" representera index i samlingen och på så vis särskilja dem. Nu är jag inte hundra på vad du menar, så förtydliga gärna.

aasahMedlem sedan mars 20034 471 inlägg
#3

Det du försöker göra ovan skulle innebära att skapa nya typer - om det gick. Tror inte det är det du vill. Du vill väl ha N st instanser av en klass? Om du vill att klassinstansen ska veta vad den heter får du använda en konstruktor som tar argument, annars måste du använda någon dynamisk struktur (array, vektor, lista, ...) som håller rätt på dina instanser åt dig.

Exempel:

public class A {
int namn;
public:
A(int i);
};

A::A(int i) : namn(i) {}

for (int i = 0; i < antal; i++ ) {
A a(i);
....
}

Men troligen vill du väl ha kvar alla antal st när de är skapade? Då kan du t.ex. skriva:
A[] arr = new A[antal];
for (int i = 0; i < antal; i++ ) {
arr = new a(i);
....
}
new gör att objektet inte dör med automatik när du når } utan
att du själv måste ta hand om det med en destruktor.

pettssonMedlem sedan jan. 20021 122 inlägg
#4

Vad jag avser göra är att skapa x spelare till mitt kortspel. Jag måste erkänna att jag inte riktigt förstår aasahs förslag, men det är säkert rätt. :) Ska försöka med PeWs metod nu, den verkar vettig.

pettssonMedlem sedan jan. 20021 122 inlägg
#5

Fast det funkade inte riktigt som jag tänkt mig :( Om jag inte ska göra om allting, vilket jag inte vill om det kan undvikas, måste jag nog skapa en instans av klassen / spelare. Ska försöka förstå aasahs kod. :e

PeWMedlem sedan juni 200010 432 inlägg
#6

pettsson skrev:

Vad jag avser göra är att skapa x spelare till mitt kortspel. Jag måste erkänna att jag inte riktigt förstår aasahs förslag, men det är säkert rätt. :) Ska försöka med PeWs metod nu, den verkar vettig.

Vi skrev ju samma saker fast hon skrev pseudokod utan taggar :e

PeWMedlem sedan juni 200010 432 inlägg
#7

Ett illustrativt exempel:

 
#include <iostream>
#include <vector>

class ABC {

private:
	int ID;
	int  my_data;
public:
	ABC():ID(0){}
	ABC(int _id):ID(_id){}
    ~ABC(){}
	int getId(void);
	int getData(void);
	void setData(int d);
};

void ABC::setData(int d){
	my_data=d;
}

int ABC::getData(void){
	return my_data;
}

int ABC::getId(void){
	return ID;
}

using namespace std;

int main(){

    int i;
	vector<ABC*> v;
	//skapar 3 instanser direkt i vektorn
    for(i=0;i<3;i++)
        v.push_back(new ABC(i));	
	
    //fyller resp. instans med 111,222,333
	for(i=0;i<3;i++)
      v.at(i)->setData((1+i)*111);
    
	//skriver ut varje lite omkastat
	cout << "Hello, my name is " 
		 << v.at(1)->getId() 
		 << " I've got " 
		 << v.at(1)->getData() << endl;
	cout << "Hello, my name is " 
		 << v.at(0)->getId() 
		 << " I've got " 
		 << v.at(0)->getData() << endl;
	cout << "Hello, my name is " 
		 << v.at(2)->getId() 
		 << " I've got " 
		 << v.at(2)->getData() << endl;
    
	//städa
         for(i=2;i>=0;i--)
	    delete v.at(i);

	return 0;
}
pettssonMedlem sedan jan. 20021 122 inlägg
#8

Mycket möjligt att nån kommer att uttala fula ord om min okunskap nu, men jag upptäckte att man kunde göra så här:

klass_namn annat_namn[i];

och då kunde man plötsligt lösa det hela ganska enkelt :r Möjligt att nån försökte förklara den här lösningen också...

PeWMedlem sedan juni 200010 432 inlägg
#9

Inga fula ord här inte! Vad ska man med ett frågeforum till om alla redan vet allt?

Klart att du kan göra som du nu skrev :)

135 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)