Search code examples
c++copy-constructorassignment-operator

assign one class object to another class object in c++


I want to assign one class object to another class object in c++.

Ex: There is one class Dog and another class Cat. Create one one instance of each (d1 & c1). Don't want to use any STL. I want to use this statement in my code

d1 = c1;

Program

class dog
{
    char  dc;
    float df;
    int   di;   
public:
    void setdata2(char c, float f, int i)
    {   dc = c; df = f; di = i; }
    void showdata2()
    {   cout  <<"char =" << dc <<", float =" << df <<", int =" << di  <<endl;   }
};


class cat
{
    float cf;
    int ci;
    char cc;    
public:
    void setdata(float f, int i, char c)
    {   cf = f; ci = i; cc = c; }
    void showdata()
    {   cout <<"float =" << cf <<", int =" << ci <<", char =" << cc  <<endl;    }
};


int main()
{
    dog d1, d2;
    cat c1, c2;

    d1.setdata2('A', 56.78, 30);
    c1.setdata(12.34, 2, 3);
    d1.showdata2();
    c1.showdata();

    d2 = c1;        // Question 1

    dog d3(c1);     // Question 2

    dog d4 = c1;    // Question 3

    return 0;
}

Please answer Question 1/2/3 each separately.


Solution

  • I want to assign one class object to another class object in c++.

    It is possible to assign an object of type A to an object of type B if A is implicitly convertible to B, and B is assignable - or, if B has an overloaded assignment operator that accepts objects of type A.

    There are two ways to define a conversion from a custom type A to an unrelated type B. You can either define a conversion function for A, or you can define a converting constructor for type B.

    1) This is copy assignment. The above explanation applies. Either define cat::operator dog() or dog::dog(cat) or dog::operator=(cat).

    2) This is direct initialization. It is not an assignment which is what you asked about. Defining an implicit conversion works for this as well, but an overloaded assignment operator will not. However, an overloaded constructor would be a substitute third alternative.

    3) Even though this looks a bit like assignment syntactically, this is actually copy initialization. Same rules apply as 2).


    PS. Note that you're defining two variables by the name d3. That is an error.