C 類設計要素

2021-07-22 13:06:31 字數 2026 閱讀 1534

標籤(空格分隔): c++

其他類方法

類函式總結

本節的內容是複習並拓展前面的討論,已介紹這些原則。1

預設建構函式要麼沒有引數,要麼全部的引數都有預設值。如果沒有定義任何建構函式,編譯器將定義預設建構函式,讓您能夠建立物件。

另外,如果派生類建構函式的成員初始化列表中沒有顯式的呼叫基類建構函式,則編譯器將使用基類的預設建構函式來構造派生類物件的基類部分。在這種情況下,如果基類沒有建構函式,將導致編譯錯誤。

複製建構函式接受其所屬的類的物件作為引數。例如,star類的複製建構函式的原型如下:

star(const star &);
在下面情況下,將使用複製建構函式:

預設的複製運算子用於處理同類物件之間的賦值。不要將賦值與初始化混淆了。如果語句建立新的物件,則使用初始化;如果修改已有物件的值,則是賦值:

star s1;

star s2 = s1;//初始化

star s3;

s3 = s1;//賦值

預設賦值為成員賦值。如果成員為類物件,則預設成員賦值將使用相應的賦值運算子。如果需要顯式的定義複製建構函式,則基於相同的原因,也需要顯式賦值運算子。star類的賦值運算子的原型如下:

star & star::operator=(const star &);
建構函式在完成任務前,物件並不存在。

一定要定義顯式析構函式,並完成類物件所需的任何特殊的清理工作。對於類,即使它不需要析構函式,也應該提供乙個虛擬析構函式。

使用乙個引數就可以呼叫的建構函式定義了從引數型別到類型別的轉換。c++11提供了explicit關鍵字關閉隱式轉換。

通常,編寫使用物件作為引數的函式時,應按照引用而不是按值來傳遞物件。這樣做的原因之一是為了提高效率。按值傳遞物件涉及到生成臨時拷貝,即呼叫複製建構函式,然後呼叫析構函式。呼叫這些函式需要時間,複製大型物件比傳遞引用話費的時間要多得多。如果函式不修改物件,還應該在引數上宣告const。

按引用傳遞物件的另乙個原因是,在繼承使用虛函式時,被定義為接受基類引用引數的函式可以接受派生類。

通常,應返回引用而不是返回物件的原因在於,返回物件設計生成返回物件的臨時副本,這是呼叫函式的程式可以使用的副本。因此,返回物件的時間成本包括呼叫複製建構函式來生成副本所需的時間和呼叫析構函式刪除副本所需的時間。返回引用可以節省時間和記憶體。

然而,並不總是可以返回引用。函式不能返回在函式中建立的的臨時物件的引用,因為當函式結束時,臨時物件將會被銷毀。因此這種引用是非法的。

使用const時應該特別注意。可以用它來確保方法不會修改引數:

star::star(const char * s);
可以使用const來確保方法不修改呼叫它的物件:

void star::show() const;
這裡const表示const star * this;所以當我們返回this引用時,也要加上const

const star::max(const star &s) const
函式

能否繼承

函式型別

預設生成

是否可以是虛函式

是否可以有返回

建構函式否成員

是否否析構函式否成員

是是否=

否成員是是

是&是任意

是是是轉換函式是成員

否是否()

是成員否是

是是成員

否是是->是成員

否是是op=是任意

否是是new

是靜態成員否否

void*

delete

是靜態成員否否

void*

其他運算子是任意

否是是其他成員是成員

否是是友元

否友元否否

是 stephen prata.c++ primer plus.人民郵電出版社.2016.3 523~530 ↩

arcpy 讀取要素類 要素

coding utf 8 要素幾何由點point構成 要素類中的每個要素都包含一組用於定義 面或線 折點的點,或者包含單個用於定義乙個 點要素 的點。可以使用幾何物件 polygon polyline pointgeometry 或 multipoint 訪問這些點,幾何物件將以 point 物件的...

獲取要素類

獲取所有要素類 要素集 要素類列表 public static listgetallfeatureclass ifeaturedataset featuredataset return featureclasslist 獲取要素類 要素資料集 要素類名稱 要素類物件 public static if...

WebApp 設計要素

介紹一下我身邊手機的瀏覽器實際尺寸 高度會隨瀏覽器不同而略有差異 更多手機瀏覽器寬度問題可參考此文章 移動手機版網頁製作時頁面寬度的問題 華麗麗的動效已不再是ios的專利了,各種js都能實現同樣的效果。要注意的是一些js在android裡得不到很好的支援。我習慣要做某種效果的時候會先找一下實現的方案...