1. 程式人生 > >C++:構造函數1——普通構造函數

C++:構造函數1——普通構造函數

創建 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     string
Gender; 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——普通構造函數