Skip to content

Instantly share code, notes, and snippets.

@ChlorUpload
Created February 14, 2020 16:00
Show Gist options
  • Save ChlorUpload/d38b7acad5acd81e54140c35f7c81d8b to your computer and use it in GitHub Desktop.
Save ChlorUpload/d38b7acad5acd81e54140c35f7c81d8b to your computer and use it in GitHub Desktop.
Constructor / Destructor Study
#define DEFAULT_CONSTRUCTOR_EXISTS
//#define COPY_CONSTRUCTOR_EXISTS
//#define ASSIGN_OPERATOR_EXITS
#include <iostream>
using namespace std;
class Parent
{
public:
Parent()
{
cout << "Parent - Default Constructor" << endl;
}
Parent(Parent const& obj)
{
cout << "Parent - Copy Constructor" << endl;
}
Parent& operator =(Parent& obj)
{
cout << "Parent - Assign Operator" << endl;
return *this;
}
int pValue;
};
class Member
{
public:
Member()
{
cout << "Member - Default Constructor" << endl;
}
Member(Member const& obj)
{
cout << "Member - Copy Constructor" << endl;
}
Member& operator =(Member& obj)
{
cout << "Member - Assign Operator" << endl;
return *this;
}
int mValue;
};
class Child : public Parent
{
public:
#ifdef DEFAULT_CONSTRUCTOR_EXISTS
Child()
{
cout << "Child - Default Constructor" << endl;
}
#endif
#ifdef COPY_CONSTRUCTOR_EXISTS
Child(Child const& obj)
{
cout << "Child - Copy Constructor" << endl;
}
#endif
#ifdef ASSIGN_OPERATOR_EXISTS
Child& operator =(Child& obj)
{
cout << "Child - Assign Operator" << endl;
return *this;
}
#endif
int cValue;
char str[256];
Member member;
Member arrMember[1][2];
};
int main(void)
{
//Test Code
cout << "--- c1 ---" << endl;
Child c1;
c1.pValue = 1;
c1.cValue = 2;
c1.member.mValue = 3;
c1.arrMember[0][0].mValue = 4;
c1.arrMember[0][1].mValue = 5;
strcpy_s(c1.str, 256, "ABCDEFG");
cout << "--- c2 ---" << endl;
Child c2(c1);
cout << "--- c3 ---" << endl;
Child c3 = c1;
cout << "--- c4 ---" << endl;
Child c4;
c4 = c1;
return 0;
}
<only DEFAULT_CONSTRUCTOR_EXISTS>
--- c1 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
--- c2 ---
Parent - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
--- c3 ---
Parent - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
--- c4 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
Parent - Assign Operator
Member - Assign Operator
Member - Assign Operator
Member - Assign Operator
<only DEFAULT_CONSTRUCTOR_EXISTS, COPY_CONSTRUCTOR_EXISTS>
--- c1 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
--- c2 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Copy Constructor
--- c3 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Copy Constructor
--- c4 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
Parent - Assign Operator
Member - Assign Operator
Member - Assign Operator
Member - Assign Operator
<only DEFAULT_CONSTRUCTOR_EXISTS, ASSIGN OPERATOR_EXISTS>
--- c1 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
--- c2 ---
Parent - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
--- c3 ---
Parent - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
Member - Copy Constructor
--- c4 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
Parent - Assign Operator
Member - Assign Operator
Member - Assign Operator
Member - Assign Operator
<all defines exist>
--- c1 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
--- c2 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Copy Constructor
--- c3 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Copy Constructor
--- c4 ---
Parent - Default Constructor
Member - Default Constructor
Member - Default Constructor
Member - Default Constructor
Child - Default Constructor
Parent - Assign Operator
Member - Assign Operator
Member - Assign Operator
Member - Assign Operator
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment