Computer >> Máy Tính >  >> Lập trình >> C ++

Khi nào các Constructors được gọi trong C ++?

Ở đâ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