Separate classes into separate files in C ++

EDIT: Added an add class that accidentally forgot about it. How to separate classes from different files? I understand how classes work and how to create objects and the like. However, I find some confusion in the process of placing classes in different files. Thanks so much for any help! In addition, I use CodeBlocks as an IDE. Here is my understanding:

  • Create a new class and CB will give you ".h" and a new ".cpp".
  • The "Class Name :: Class Name" at the beginning of the source file is the Scope Resolution Operator.
  • You use "#include classname.h" in your main source file to import its contents.
  • You can call functions from "main" using the objects you declare.

This is my understanding so far, but I'm just confused about how to implement it. I created a simple calculator with all classes in one source file. It works great, and I think I'm very proud of it :) I know that there is a much easier way to do something like this, but instead I used classes and objects for the sole purpose of practice. Here is my calculator code. Also, I really apologize for the long post: / Thank you if you went this far reading it, and thanks, especially if you can help me a little!

Here is my code in one source file:

#include <iostream> using namespace std; class Addition { public: float add (float x, float y) { float sum; sum=x+y; return sum; } }; class Subtraction { public: float subtract (float x, float y) { float dif; dif=xy; return dif; } }; class Multiplication { public: float multiply (float x, float y) { float prod; prod=x*y; return prod; } }; class Division { public: float divide (float x, float y) { float quot; quot=x/y; return quot; } }; int op; char cont; int main() { do { cout<<"Welcome to C++ Calculator v2!"<<endl; cout<<"Select the number for which operation you want to use: "<<endl; cout<<"1-Addition"<<endl; cout<<"2-Subtraction"<<endl; cout<<"3-Mutliplication"<<endl; cout<<"4-Division"<<endl; cin>>op; if (op==1) { float num1; float num2; Addition addobj; cout<<"You have chosen Addition!"<<endl; cout<<"Enter the first number you want to add: "<<endl; cin>>num1; cout<<"Enter the second number you wat to add: "<<endl; cin>>num2; float ans=addobj.add(num1, num2); cout<<"The sum is "<<ans<<endl; cout<<"Do you wish to continue? Y/N"<<endl; cin>>cont; } if (op==2) { float num1; float num2; Subtraction subobj; cout<<"You have chosen Subtraction!"<<endl; cout<<"Enter the first number you want to subtract: "<<endl; cin>>num1; cout<<"Enter the second number you want to subtract: "<<endl; cin>>num2; float ans=subobj.subtract(num1, num2); cout<<"The difference is "<<ans<<endl; cout<<"Do you wish to continue? Y/N"<<endl; cin>>cont; } if (op==3) { float num1; float num2; Multiplication multobj; cout<<"You have chosen Multiplication!"<<endl; cout<<"Enter the first number you want to multiply: "<<endl; cin>>num1; cout<<"Enter the second number you want to multiply: "<<endl; cin>>num2; float ans=multobj.multiply(num1, num2); cout<<"The product is "<<ans<<endl; cout<<"Do you wish to continue? Y/N"<<endl; cin>>cont; } if (op==4) { float num1; float num2; Division divobj; cout<<"You have chosen Division!"<<endl; cout<<"Enter the first number you want to divide: "<<endl; cin>>num1; cout<<"Enter the second number you want to divide: "<<endl; cin>>num2; float ans=divobj.divide(num1, num2); cout<<"The quotient is "<<ans<<endl; cout<<"Do you wish to continue? Y/N"<<endl; cin>>cont; } } while (cont=='Y'||cont=='y'); if (cont=='N'||'n') { cout<<"Thanks for using my program, goodbye!"<<endl; } return 0; } 
+4
source share
4 answers

Ok, I will show you by following your example:

subtraction.h

 class Subtraction { public: float subtract (float x, float y); }; 

subtraction.cxx

 #include "subtraction.h" float Subtraction::subtract (float x, float y) { float dif; dif=xy; return dif; } 

multiplication.h

 class Multiplication { public: float multiply (float x, float y); }; 

multiplication.cxx

 #include "multiplication.h" float Multiplication::multiply (float x, float y) { float prod; prod=x*y; return prod; } 

etc.

main.cxx

 #include "subtraction.h" #include "multiplication.h" int main() { //use the classes just as before. } 

In addition, I did not put it in the code here for simplicity, but go ahead and get used to having your ads run only once. In a large project, this can become very unpleasant if you do not include these guarantees.

 #ifndef SUBTRACTION_H #define SUBTRACTION_H class Subtraction { .... }; #endif /*SUBTRACTION_H*/ 
+3
source

here is something similar to Jonathan's example (I didn’t add guards included for brevity, definitely do it though!), but with some duplication removed and some OO added for your learning pleasure. Please note that although this, of course, is not how the actual calculator will be implemented, it will hopefully give you some understanding of C ++ if you study it well enough.

mathoperation.h:

  //a base class! class MathOperation { public: virtual float doit( float x, float y ) const = 0; }; 

subrtaction.h:

 class Subtraction : public MathOperation { public: float doit( float x, float y ) const; }; 

addition.h:

 class Addition : public MathOperation { public: float doit( float x, float y ) const; }; 

subtraction.cpp:

 #include "subtraction.h" float Subtraction::doit( float x, float y ) const { return x - y; } 

addition.cpp:

 #include "addition.h" float Subtraction::doit( float x, float y ) const { return x + y; } 

main.cpp:

 #include <iostream> #include <string> //yes this saves typing, but there reasons not to use it.. search SO! using namespace std; //this one avoids you having to copy/paste the similar parts void DoIt( const MathOperation& op, const std::string& opName, const std::string& verb, const std::string& resultName ) { cout << "You have chosen " << opName << "!" << endl; cout<<"Enter the first number you want to " << verb << ": "<< endl; //here you should actually check if the user really types in a number, and not "blablabla" //and off course, put it in a seperate function so you can reuse it for num2 float num1; cin>>num1; float num2; cout<<"Enter the second number you wat to " << verb << ": "<< endl; cin>>num2; cout<<"The " << resultName << " is " << op.doit( num1, num2 ) <<endl; } int main() { int op; char cont = 'n'; do { cout<<"Welcome to C++ Calculator v2!"<<endl; cout<<"Select the number for which operation you want to use: "<<endl; cout<<"1-Addition"<<endl; cout<<"2-Subtraction"<<endl; cout<<"3-Mutliplication"<<endl; cout<<"4-Division"<<endl; cin>>op; //see how much shorter this is? if( op == 1 ) DoIt( Addition(), "Addition", "add", "sum" ); else if (op==2) DoIt( Subtraction(), "Subtraction", "subtract", "difference" ); else cout << "Sorry I don't know this number" << endl; cout<<"Do you wish to continue? Y/N"<<endl; cin>>cont; } while (cont=='Y'||cont=='y'); cout<<"Thanks for using my program, goodbye!"<<endl; return 0; } 
+1
source

It's good to name files just like a class. This is not such a good idea in your case, since your classes are short, but each class should have its own 2 files - for example, Subtraction.h and Subtraction.cpp. In the .h file, you should only place the division - in your case: class Subtraction { public: float subtract (float , float); } class Subtraction { public: float subtract (float , float); }

In the .cpp file, you must include the .h file and place the implementation. In your case:

float Substraction::subtract (float x, float y) { float dif; dif=xy; return dif; }

See also C ++ Header Files, Code Separation, and Why are C ++ Header and .cpp Files Available?

Hope this helps! :)

0
source

It is good to have only one public class for each file. The conditional file name is the same as the class name (with the extension, for example .h.hh or .hpp, if some definitions are executed in the file).

if you want to put different classes in different files, a simple text editor will help you.

0
source

All Articles