Thank you for all your replies, guys. It'll definitely help (once I have time to go back to this program). I do have some follow-up questions, though.
This is the way I'd suggest to do it.. Honestly it would be the best way. This way each attack doesn't need its own function or class. While in battle, lets say pikachu attacks a squritle you could have the attack function check between the pokemon types and move types then have a super effective attack happen. I hope you understand where I'm going with this I just cant word it very well at the moment if your having trouble understanding I will try to explain better
I'm not 100% of what you're saying, but it seems like you're saying what I have planned out. The battle engine itself will check for the move and pokemon type currently in battle. I have my pokemon and move types as an int variable of that pokemon class. I plan to make a function which compares between the pokemon's type and the attack being used against it, as well as checking for STAB for the pokemon currently attacking (doing all damage calculations etc).
In Essentials, each move is an instance of one class, which reads the compiled data for that move. In battles, each move is an instance of a different class which inherits much of the information from the first class (i.e. base power, etc.). This battle move class also contains various functions that can modify the move's power, accuracy, type and so forth.
This part I'm not completely grasping what you're trying to explain here (please forgive me! I'm only learning c++ on my own, haven't really taken an actual course). This is what I think you're talking about: class composition - making one class which has all of its instances being the moves themselves, but through compiled data? As in from an external data file? The battle move class inherits the information through the first class, meaning the class that has each move as an instance of the class?
Yes, definitely create a move as a base class, but in that base class, have a virtual function called "useMove()" or something that the battle engine will call to run the move. That way, the battle engine doesn't need to care what move is being used (and what class type), since they will all have the same useMove() which will then automatically branch into other things depending on the type of subclass.
Yes. My original plan was like this. Create a base 'attack/move' class with a function similar to 'useMove()' as a pure virtual function to make it an abstract class. Which brings me to what I had originally planned for some parts of the whole battle engine.
My pokemon base class will have an attack list vector, representing the 4 attacks the user chooses to have his/her pokemon to have. The derived pokemon (the pokemon themselves) will inherit their own list/vector where these would store pointers to the attacks. In the main program, the user chooses the attacks he/she would like to use and put the attack in the list (something along the lines attack_list.push_back(new attack()) ). In my main 'battle()' function, where the main battle engine will be where you can choose an attack for the pokemon that's first in your party as well as various other stuff, would call the 'attack() function of that pokemon class. The 'attack()' function will pass an integer (based on which attack slot the user chooses) into the function that will determine which attack the pokemon will use from the list. The attacks would have, similar to what Dragonite Ernston says, a useMove() function that determines its power, accuracy, status effect, etc etc. It will also check the opponent's pokemon type, defense, all that good stuff to calculate damage and apply miscellaneous effects.
Now that you guys have an idea of what I had originally planned to do, you could possibly clarify, and correct me on my chosen plan. I'm understanding more and more as I write this post out and discuss it.
Edit: Wow, didn't realize my post was so long!