成員列表函式

2021-05-25 21:54:41 字數 1402 閱讀 2722

如果方法或函式要返回區域性物件,則應返回物件,而不是物件的引用。在這種情況下,將使用複製建構函式來生成返回的物件。

如果方法或函式返回乙個沒有公有複製建構函式的類(如ostream)的物件,它必須返回乙個指向這種物件的引用。

最後,有些方法和函式(如過載的複製操作符)可以返回物件,也可以返回指向物件的引用,在這種情況下應首選引用,因為其效率更高。

class string

string *pveg=new string("cabbage heads home");的執行流程:

1.為物件分配記憶體str,len;

2.呼叫類建構函式,它將為"cabbage heads home"分配空間->將"cabbage heads home"複製到分配的記憶體空間中->將"cabbage heads home"的位址賦給str->將值19賦給len;

3.建立pveg變數;

4.將新點位址賦給pveg變數。

justtesting是類名,使用布局new操作符宣告這個類的物件:

char * buffer=new char[30];

pc1=new (buffer) justtesting;

pc2=new justtesting;

使用布局new操作符為物件分配記憶體,必須確保其析構函式被呼叫。對於堆中建立的物件,可以用delete pc2;然而,對於用布局new操作符建立的pc1,卻不能直接delete pc1;這是因為delete只能與常規new操作符配合使用。

解決方案是:

顯示地為使用布局new操作符建立的物件呼叫析構函式:pc1->~justtesing();

然後再釋放儲存這個物件的緩衝區:delete buffer;

class queue

queue::queue(int qs)

其中,qsize是常量,可以對它進行初始化,但不能給它賦值。概念上來說,呼叫建構函式時,物件將在花括號中的**執行之前被建立。因此,呼叫queue(int qs)建構函式將導致程式首先給qsize分配記憶體;然後,程式再使用常規的賦值方法將值儲存在記憶體中。因此,對於const資料成員,必須在執行到建構函式體之前,即建立物件時進行初始化,這需要用成員初始化列表。

成員初始化列表由逗號分隔的初始化列表組成,前面帶冒號。如:

queue::queue(int qs):qsize(qs){}

對於const類成員,必須使用這種句法,另外,對於宣告為引用的類成員,也必須使用,如:

class agency

class agent

agent::agent(agency & a):belong(a){}

這是因為引用和const資料相似,只能在被建立時初始化。

成員初始化列表只能用於建構函式,並且使用成員初始化列表的效率更高。而資料成員被初始化的順序與它們出現在類宣告中的順序相同,與初始化器中的排列順序無關。

python列表類的成員函式

python列表類的成員函式 list.extend l 這個函式將列表l的所有元素新增到原列表的末尾,相當於list list l 例 定義mylist 1,2,3 執行mylist.extend 4,5 後的列表中的值為 1,2,3,4,5 例如,定義mylist 1,2,3 執行mylist....

C 建構函式初始化成員列表

1.只能在建構函式初始化列表初始化的成員變數的型別?a.const成員變數 b.引用型別的成員變數 c.static不能在初始化列表中進行初始化 d.類成員變數中有自定義型別的變數最好在初始化列表中進行初始化 2.初始化列表的順序?初始化列表的初始化順序是依據類成員變數定義的順序來決定的。3.關於s...

C 成員函式形參列表後的const

有時候我們在閱讀一些原始碼時,發現有些類的成員函式的形參列表後面有個const,但是使用的時候感覺跟那些沒有const的成員函式沒有啥區別,舉個簡單栗子如下,include using namespace std class testclass virtual testclass intgetval...