C++:構造函數1——普通構造函數
阿新 • • 發佈:2017-08-23
創建 c++編譯 clu namespace 我們 這一 () 一次 ret
前言:構造函數是C+中很重要的一個概念,這裏對其知識進行一個簡單的總結
一、構造函數的定義
1.類中的構造函數名與類名必須相同
2.構造函數沒有函數的返回類值型說明符
[特別註意]:
a.構造函數的返回值類型不是void,而是沒有
b.構造函數雖然沒有返回值類型說明符,但構造函數是有返回值的,構造函數的返回值是其所創建的對象
1 class Student{ 2 public: 3 Student(){} //構造函數的函數名與類名必須相同 4 //構造函數沒有返回值類型說明符 5 .....//其他操作 6 }
3.在程序運行時,當新的對象被建立時,該對象所屬的類的構造函數自動被調用,且在該對象生存期中只調用這一次
4.構造函數可以重載。在類中可以定義多個構造函數,它們由不同的參數列表區分,系統在自動調用時按一般函數重載的規則選一個執行
1 class Student{ 2 public: 3 Student(){}//構造函數1 4 Student(string name);//構造函數2 5 Student(string name,int age);//構造函數3 6 Student(string name,int age,string gender);//構造函數4 7 private: 8 string Name; 9 int Age; 10 stringGender; 11 } 12 13 int main(){ 14 Student stu1;//調用構造函數1 15 Student stu2("Tomwenxing");//調用構造函數2 16 Student stu3("Tomwenxing",23);//調用構造函數3 17 Student stu4("Tomwenxing",23,"male");//調用構造函數4 18 return 0; 19 }
5.構造函數可以在類中定義,也可以在類外定義
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 class Student{ 5 public: 6 Student(){} 7 Student(string name){//類內定義構造函數 8 this->name=name; 9 } 10 Student(string name,int age);//類內聲明構造函數,類外定義構造函數 11 private: 12 string name; 13 int age; 14 }; 15 16 Student::Student(string name,int age){ //類外定義構造函數 17 this->name=name; 18 this->age=age; 19 } 20 21 int main(){ 22 Student stu1; 23 Student stu2("Tomwenxing"); 24 Student stu3("Tomwenxing",23); 25 return 0; 26 }
6.如果類定義中沒有定義任何一個構造函數,C++編譯器會自動給出一個缺省的構造函數(稱為默認構造函數):
默認構造函數:類名(){}
但是,只要我們手動定義了一個構造函數,系統就不會再為我們自動生成缺省的默認構造函數了,如果仍希望類中由默認構造函數,需要編程者自己手動定義
[特別註意]:
只要構造函數是無參的或者只要各參數均有缺省轉值的,C++編譯器都認為是缺省的構造函數,因此缺省的構造函數在類定義中至多只能有一個
1 #include<iostream> 2 using namespace std; 3 class Student{ 4 public: 5 Student(){} //構造函數1 6 Student(int value=0){//構造函數2 7 this->value=value; 8 } 9 Student(int value=0,int value2=0){//構造函數3 10 this->value=value; 11 this->value2=value2; 12 } 13 private: 14 int value; 15 int value2; 16 }; 17 int main(){ 18 Student stu1; //錯誤:不知道調用哪個構造函數 19 return 0; 20 }
7.構造函數初始化列表:負責為新創建的對象的一個或幾個數據成員賦初值。其中構造函數初始值是成員名字的一個列表,每個名字後面緊跟括號括起來的(或者在花括號內的)成員初始值,且不同成員的初始化通過逗號分開。
1 #include<iostream> 2 using namespace std; 3 class Student{ 4 public: 5 Student(){}//手動定義默認構造函數 6 Student(int value1):Value(value1){}//構造函數初始化列表 7 Student(int value1,int value2); 8 private: 9 int Value; 10 int Value2; 11 }; 12 Student::Student(int value1,int value2):Value(value1),Value2(value2){} 13 int main(){ 14 Student stu1(10); 15 Student stu2(10,20); 16 return 0; 17 }
C++:構造函數1——普通構造函數