程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++的默認構造函數

C++的默認構造函數

編輯:關於C++

1、每個類必須有一個構造函數,否則沒法創建對象;

2、若programer沒有提供任何構造函數,則C++提供一個默認的構造函數,該默認構造函 數是無參構造函數,它僅負責創建對象,不做任何初始化的工作;

3、只要programer定義了一個構造函數(不管是無參還是有參構造),C++就不再提供默 認的默認構造函數。即如果為類定義了一個帶參的構造函數,還想要無參構造函數,就必須 自己定義;

4、與變量定義類似,在用默認構造函數創建對象時,如果創建的是全局對象或靜態對象 ,則對象的位模式全為0,否則,對象值是隨機的。

注:2所述,C++在某些情況下會提供默認構造函數,但在某些情況下並不會自動調用。

實事上,當用戶沒有提供自定義的構造函數的時候,聲明該類的對象,以及定義包含該對 象的數組,都不會調用默認構造函數;但定義包含該對象的容器時,會自動調用默認的構造 函數。

舉例如下:

 #include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;

class Student
{
public:
    // Student() : val(6){} // 1
    // Student(int val) : val(6){} // 2
    int val;
};

void main()
{
    Student s;
    cout << s.val; // 編譯通過,但運行時出錯:the variable 's' is being used without being defined.
             // 說明沒有調用默認構造函數

    Student arr[4];
    cout << arr[2]; // 編譯通過,但運行出錯:the variable 'arr' is being used without being defined.
             // 說明沒有調用默認構造函數

    vector<Stu> vec(5);
    cout << vec[3].val << endl; //運行無誤,但輸出結果未定義(取 決於編譯器,可能是隨機值或0)
                      // 說明調用了默認構造函數

    Student *ptr = new Student[4];
    cout << ptr[1].val; //運行無誤,但輸出結果未定義(取決於編譯器,可 能是隨機值或0)
                 // 說明調用了默認構造函數

    Student ss = Student(); // 顯示調用
    cout << ss.val; // 運行無誤,但輸出結果未定義(取決於編譯器,可能是 隨機值或0)
                // 說明調用了默認構造函數
}

若將Student定義體中的注釋1去掉,即自定義無參構造函數,則main函數中的幾種形式的 對象定義都會調用該自定義的無參構造函數;

但只將注釋2去掉,即自定義帶參構造,而不提供無參構造,則main函數的幾種形式的對 象定義都將因為沒有可用的默認構造函數而編譯出錯。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved