How to use a class object in C++ as a function parameter

后端 未结 5 1899
离开以前
离开以前 2021-01-30 07:15

I am not sure how to have a function that receives a class object as a parameter. Any help? Here is an example below.

#include

void function(cla         


        
相关标签:
5条回答
  • 2021-01-30 07:34

    If you want to pass class instances (objects), you either use

     void function(const MyClass& object){
       // do something with object  
     }
    

    or

     void process(MyClass& object_to_be_changed){
       // change member variables  
     }
    

    On the other hand if you want to "pass" the class itself

    template<class AnyClass>
    void function_taking_class(){
       // use static functions of AnyClass
       AnyClass::count_instances();
       // or create an object of AnyClass and use it
       AnyClass object;
       object.member = value;
    }
    // call it as 
    function_taking_class<MyClass>();
    // or 
    function_taking_class<MyStruct>();
    

    with

    class MyClass{
      int member;
      //...
    };
    MyClass object1;
    
    0 讨论(0)
  • 2021-01-30 07:39

    I was asking the same too. Another solution is you could overload your method:

    void remove_id(EmployeeClass);
    void remove_id(ProductClass);
    void remove_id(DepartmentClass);
    

    in the call the argument will fit accordingly the object you pass. but then you will have to repeat yourself

    void remove_id(EmployeeClass _obj) {
        int saveId = _obj->id;
        ...
    };
    
    void remove_id(ProductClass _obj) {
        int saveId = _obj->id;
        ...
    };
    
    void remove_id(DepartmentClass _obj) {
        int saveId = _obj->id;
        ...
    };
    
    0 讨论(0)
  • 2021-01-30 07:42

    class is a keyword that is used only* to introduce class definitions. When you declare new class instances either as local objects or as function parameters you use only the name of the class (which must be in scope) and not the keyword class itself.

    e.g.

    class ANewType
    {
        // ... details
    };
    

    This defines a new type called ANewType which is a class type.

    You can then use this in function declarations:

    void function(ANewType object);
    

    You can then pass objects of type ANewType into the function. The object will be copied into the function parameter so, much like basic types, any attempt to modify the parameter will modify only the parameter in the function and won't affect the object that was originally passed in.

    If you want to modify the object outside the function as indicated by the comments in your function body you would need to take the object by reference (or pointer). E.g.

    void function(ANewType& object); // object passed by reference
    

    This syntax means that any use of object in the function body refers to the actual object which was passed into the function and not a copy. All modifications will modify this object and be visible once the function has completed.

    [* The class keyword is also used in template definitions, but that's a different subject.]

    0 讨论(0)
  • 2021-01-30 07:56

    At its simplest:

    #include <iostream>
    using namespace std;
    
    class A {
       public:
         A( int x ) : n( x ){}
         void print() { cout << n << endl; }
       private:
         int n;
    };
    
    void func( A p ) {
       p.print();
    }
    
    int main () {
       A a;
       func ( a );
    }
    

    Of course, you should probably be using references to pass the object, but I suspect you haven't got to them yet.

    0 讨论(0)
  • 2021-01-30 07:56

    holy errors The reason for the code below is to show how to not void main every function and not to type return; for functions...... instead push everything into the sediment for which is the print function prototype... if you need to use useful functions ... you will have to below..... (p.s. this below is for people overwhelmed by these object and T templates which allow different variable declaration types(such as float and char) to use the same passed by value in a user defined function)

    char arr[ ] = "This is a test";
    
    string str(arr);
    
    
    //  You can also assign directly to a string.
    str = "This is another string";
    

    can anyone tell me why c++ made arrays into pass by value one at a time and the only way to eliminate spaces and punctuation is the use of string tokens. I couldn't get around the problem when i was trying to delete spaces for a palindrome...

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int getgrades(float[]);
    int getaverage(float[], float);
    int calculateletters(float[], float, float, float[]);
    int printResults(float[], float, float, float[]);
    
    
    int main()
    {
    
    int i;
    float  maxSize=3, size;
    float  lettergrades[5], numericgrades[100], average;
    
    size=getgrades(numericgrades);
    average = getaverage(numericgrades, size);
    printResults(numericgrades, size, average, lettergrades);
    return 0;
    }
    
    int getgrades(float a[])
    { 
    
    
    int i, max=3;
    
    for (i = 0; i <max; i++)
    {
        //ask use for input
        cout << "\nPlease Enter grade " << i+1 << " : ";
        cin >> a[i];
        //makes sure that user enters a vlue between 0 and 100
    
       if(a[i] < 0 || a[i] >100)
        {
            cout << "Wrong input. Please
     enter a value between 0 and 100 only." << endl;
            cout << "\nPlease Reenter grade " << i+1 << " : ";
            cin >> a[i];
    
            return i;
        }
    }
    }
    
    int getaverage(float a[], float n) 
    { 
    int i;
    float sum = 0;
     if (n == 0)
    return 0;
    for (i = 0; i < n; i++)
    sum += a[i];
    return sum / n;
    }                               
    
    
    int printResults(float a[], float n, float average, float letters[]) 
    {
    int i;
    cout << "Index Number | input  |
    array values address in memory " << endl;
    
    for (i = 0; i < 3; i++)
    {
    cout <<"     "<< i<<" \t\t"<<setprecision(3)<<
    a[i]<<"\t\t" << &a[i] << endl;
    }
    cout<<"The average of your grades is: "<<setprecision(3)<<average<<endl;
    
    }
    
    0 讨论(0)
提交回复
热议问题