c++學習筆記 -- 建構函式
宣告:程式碼出處http://www.weixueyuan.net/view/6339.html
建構函式是類中一種特殊的成員函式,其特殊之處有三點:
建構函式的函式名必須與類名相同;
建構函式無返回值;
當我們建立類物件的時候建構函式會被自動呼叫,而無需我們主動呼叫。
一個類中可以有多個建構函式,建構函式之間構成函式過載的關係。
通常如果在定義類的時候,程式設計人員沒有主動宣告任何一個建構函式的時候,系統會自動生成一個預設建構函式,預設建構函式就是不帶任何引數的建構函式。
其它帶引數的建構函式統稱為帶參建構函式。
我們建立了帶參建構函式,預設建構函式不會被自動建立
在建構函式中還可以呼叫函式:
class book
{
public:
book(){}
book(char* a, double p){init(a,p);};
void setprice(double a);
double getprice();
void settitle(char* a);
char * gettitle();
void display();
void init(char* a, double p);
private:
double price;
char * title;
};
void book::init(char* a, double p)
{
title = a;
price = p;
}
//----------------------------------------------------------
一個帶預設引數的建構函式
#include
usingnamespacestd;
classbook
{
public:
book(){}
book(char*a,doublep=5.0);
voiddisplay();
private:
doubleprice;
char*title;
};
book::book(char*a,doublep)//在定義函式的時候可以不指定預設引數
{
title=a;
price=p;
}
voidbook::display()
{
cout<<"The price of "<
}
intmain()
{
bookHarry("Harry Potter",49.9);
Harry.display();
bookGone("Gone with the Wind");
Gone.display();
return0;
}
需要說明的是帶預設引數的建構函式,其預設引數必須置於引數列表的結尾。如果例1中帶參建構函式 book(char* a, double p = 5.0); 被宣告成 book(double p = 5.0, char* a); 則是無法通過編譯的,因為預設引數不在引數列表的結尾。
確切的說是帶預設引數的形參的右邊 不能有沒帶引數的形參
目的是為了消除二義性
如:
book(double a,int b,int c):a(0),b(0),c(0);
book(double a = 1,int b,int c = 2);
如果定義 book b1(3); 編譯器就不知道你要呼叫哪一個建構函式了。
//-------------------------------------
拷貝建構函式,顧名思義,就是通過拷貝物件的方式建立一個新物件。拷貝建構函式有兩種原型
book(book&b);
book(constbook&b);
這兩種原型都是book類物件的引用。
如果拷貝建構函式的引數不是物件的引用,則是不允許的。
拷貝建構函式除了能有物件引用這樣的引數之外,同樣也能有其它引數。但是其它引數必須給出預設值
book(constbook&b,price=5.0);
classbook
{
public:
book(){}
book(book&b);
book(char*a,doublep=5.0);
voiddisplay();
private:
doubleprice;
char*title;
};
book::book(book&b)
{
price=b.price;
title=b.title;
}
book::book(char*a,doublep)
{
title=a;
price=p;
}
voidbook::display()
{
cout<<"The price of "<
}
如果一個類中包含指向動態分配儲存空間的指標型別的成員變數時,就應該為這個類設計一個拷貝建構函式,除了需要設計一個拷貝建構函式之外,還需要為它新增一個賦值操作符過載函式
#include
#include
using namespace std;
class Sample{
public:
Sample(){cout<<"Sample chuxian"<<++a<
~Sample(){cout<<"Sample likai"<<--a<
private:
static int a;
};
int Sample:: a = 0;
int main()
{
Sample a[2],*p[3],&b = a[1];
return 0;
}
建構函式 只用普通函式呼叫了建構函式 指標和引用都不會去呼叫建構函式
相關文章
- C++學習筆記-----類和建構函式C++筆記函式
- Objective-C學習筆記---建構函式和解構函式Object筆記函式
- 【C#學習筆記】類建構函式使用C#筆記函式
- C++學習筆記(二)——函式C++筆記函式
- c++ 的學習 建構函式1C++函式
- PHP 手冊 (類與物件) 學習筆記五:建構函式和解構函式PHP物件筆記函式
- C++入門記-建構函式和解構函式C++函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- hive學習筆記之七:內建函式Hive筆記函式
- C++ 建構函式和解構函式C++函式
- 【C++】建構函式C++函式
- C++建構函式C++函式
- 《從零開始學Swift》學習筆記(Day 37)——預設建構函式Swift筆記函式
- 《從零開始學Swift》學習筆記(Day 39)——建構函式過載Swift筆記函式
- C++ 類建構函式和解構函式C++函式
- 預設建構函式學習函式
- async函式學習筆記。函式筆記
- Go 函式 學習筆記Go函式筆記
- 分析函式(學習筆記)函式筆記
- 生成函式 學習筆記函式筆記
- 工廠方法、建構函式、原型物件——JS基礎學習筆記(四)函式原型物件JS筆記
- 《C++ Primer》學習筆記(六):C++模組設計——函式C++筆記函式
- 《從零開始學Swift》學習筆記(Day 51)——擴充套件建構函式Swift筆記套件函式
- 《從零開始學Swift》學習筆記(Day43)——建構函式繼承Swift筆記函式繼承
- C++筆記--函式C++筆記函式
- TS學習筆記(四):函式筆記函式
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- Golang學習筆記-1.6 函式Golang筆記函式
- Oracle學習筆記(6)——函式Oracle筆記函式
- LoadRunner函式學習筆記函式筆記
- MYSQL學習筆記14: 函式MySql筆記函式
- C++學習筆記-C++對C語言的函式擴充C++筆記C語言函式
- [C++]顯示呼叫建構函式和解構函式C++函式
- 深度學習——loss函式的學習筆記深度學習函式筆記
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- C++語言之結構體、類、建構函式、拷貝建構函式C++結構體函式
- C++複製建構函式C++函式
- c++建構函式詳解C++函式