#include <iostream>
using namespace std;
const int Nsize = 51;
class Test1//Passing as reference, not working.
{public:
char* name;
int x;
Test1()
{
name = new char[Nsize];strncpy_s(name, Nsize, "blank", Nsize);
}
Test1(const char*desc, int x0)
{
name = new char[Nsize];strncpy_s(name, Nsize, desc, Nsize);x = x0;
}
Test1(const Test1& right)
{
name = new char[Nsize];strncpy_s(name, Nsize, right.name, Nsize);
x = right.x;
}
Test1& operator = (const Test1&rhs)//Passing as reference
{
x = rhs.x; return *this;
}
Test1& operator+(const Test1& rhs)//Passing as reference
{
Test1 sum; sum.x = x + rhs.x; return sum;
}
void print()
{
cout << name << " = (" << name << ", " << x << ")\n\n";
}
~Test1()
{
delete[] name;
}
};
class Test2//Passing as Object, works.
{public:
char* name;
int x;
Test2()//Constructor
{
name = new char[Nsize]; strncpy_s(name, Nsize, "blank", Nsize);
}
Test2(const char* desc, const int x0)//Constructor
{
name = new char[Nsize]; strncpy_s(name, Nsize, desc, Nsize);
x = x0;
}
Test2(const Test2& right)//Copy constructor
{
name = new char[Nsize];
strncpy_s(name, Nsize, right.name, Nsize);
x = right.x;
}
Test2 operator = (const Test2& rhs)
{
x = rhs.x;
return *this;
}
Test2 operator+(const Test2& rhs)
{
Test2 sum;
sum.x = x + rhs.x;
return sum;
}
void print()
{
cout << name << " = (" << name << ", " << x << ")\n\n";
}
~Test2()
{
delete[] name;
}
};
int main()
{
Test1 A("B", 0);
Test1 B("B", 1);
Test1 C("C", 2);
A = B + C;
A.print();
Test2 D("D", 0);
Test2 E("E", 3);
Test2 F("F", 4);
D = E + F;
D.print();
}