Ở đây chúng ta sẽ thấy, khi các hàm tạo được gọi. Ở đây các hàm tạo thuộc nhiều loại khác nhau. Toàn cục, cục bộ, cục bộ tĩnh, động.
Đối với đối tượng toàn cục, các hàm tạo được gọi trước khi nhập vào hàm chính.
Ví dụ
#include <iostream> using namespace std; class MyClass { public: MyClass() { cout << "Calling Constructor" << endl; } }; MyClass myObj; //Global object int main() { cout << "Inside Main"; }
Đầu ra
Calling Constructor Inside Main
Khi đối tượng không tĩnh, thì hàm tạo được gọi khi quá trình thực thi đạt đến điểm, nơi đối tượng được tạo.
Ví dụ
#include <iostream> using namespace std; class MyClass { public: MyClass() { cout << "Calling Constructor" << endl; } }; int main() { cout << "Inside Main\n"; MyClass myObj; //Local object cout << "After creating object"; }
Đầu ra
Inside Main Calling Constructor After creating object
Khi đối tượng là tĩnh cục bộ, thì chỉ trong lần đầu tiên, phương thức khởi tạo của nó sẽ được gọi, nếu cùng một hàm được sử dụng lại, nó sẽ không ảnh hưởng.
Ví dụ
#include <iostream> using namespace std; class MyClass { public: MyClass() { cout << "Calling Constructor" << endl; } }; void func() { static MyClass myObj; //Local static object } int main() { cout << "Inside Main\n"; func(); cout << "After creating object\n"; func(); cout << "After second time"; }
Đầu ra
Inside Main Calling Constructor After creating object After second time
Cuối cùng đối với đối tượng động, hàm tạo sẽ được gọi, khi đối tượng được tạo bằng toán tử new.
Ví dụ
#include <iostream> using namespace std; class MyClass { public: MyClass() { cout << "Calling Constructor" << endl; } }; int main() { cout << "Inside Main\n"; MyClass *ptr; cout << "Declaring pointer\n"; ptr = new MyClass; cout << "After creating dynamic object"; }
Đầu ra
Inside Main Declaring pointer Calling Constructor After creating dynamic object