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++筆記函式
- C++學習筆記(二)——函式C++筆記函式
- c++ 的學習 建構函式1C++函式
- PHP 手冊 (類與物件) 學習筆記五:建構函式和解構函式PHP物件筆記函式
- C++入門記-建構函式和解構函式C++函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- C++ 建構函式和解構函式C++函式
- hive學習筆記之七:內建函式Hive筆記函式
- 《C++ Primer》學習筆記(六):C++模組設計——函式C++筆記函式
- async函式學習筆記。函式筆記
- 生成函式 學習筆記函式筆記
- 工廠方法、建構函式、原型物件——JS基礎學習筆記(四)函式原型物件JS筆記
- 預設建構函式學習函式
- C++學習筆記-C++對C語言的函式擴充C++筆記C語言函式
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- Golang學習筆記-1.6 函式Golang筆記函式
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- MYSQL學習筆記14: 函式MySql筆記函式
- python學習筆記(六)——函式Python筆記函式
- TS學習筆記(四):函式筆記函式
- Oracle學習筆記(6)——函式Oracle筆記函式
- C++複製建構函式C++函式
- 深度學習——loss函式的學習筆記深度學習函式筆記
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- MYSQL學習筆記7: 聚合函式MySql筆記函式
- OpenCV學習筆記(4)——mixChannels函式OpenCV筆記函式
- OpenCV學習筆記(5)——normalize函式OpenCV筆記ORM函式
- Flutter學習筆記(4)--Dart函式Flutter筆記Dart函式
- js純函式學習筆記(一)JS函式筆記
- c語言學習筆記===函式C語言筆記函式
- (C++通訊架構學習筆記):日誌列印、優化main函式呼叫順序C++架構筆記優化AI函式
- python3 筆記16.構建函式defPython筆記函式
- C++學習隨筆——C++仿函式的應用方法C++函式
- MYSQL學習筆記15: 數值函式MySql筆記函式
- PHP 第八週函式學習筆記PHP函式筆記
- 學習筆記:javascript中的Generator函式筆記JavaScript函式
- JavaScript學習筆記(七)—— 再說函式JavaScript筆記函式
- 工作學習筆記(三)to_char函式筆記函式
- pandas之常用基本函式學習筆記函式筆記