C 物件導向

2021-12-30 03:07:35 字數 2218 閱讀 3624

c++物件導向

1.類物件的生存週期

要注意的問題:物件什麼時候構造,什麼時候析構,是否產生臨時量,怎樣產生臨時量,臨時量何時構造,臨時量何時析構;

q:臨時物件的生存週期?

a:臨時物件所在的語句,語句結束,臨時物件析構

q:顯示生成臨時物件和隱式生成臨時物件

a:指定型別名:顯示生成,看不見類名:隱式生成;隱式生成的物件都是常物件

(1) cgoods good4 = cgoods(「shangpin」,30,12.5)

//顯示生成臨時物件

分析:臨時物件在定義時產生,出所在語句生存期結束(;,?),編譯器在用臨時物件構造同型別的新物件時,臨時物件並不產生,用構造臨時物件的方式直接構造目標物件。(編譯器的優化,省去了臨時物件的生成,再呼叫拷貝構造構造good4,再析構的繁瑣過程)

(2)cgoods good1;

good1 = cgoods(「shangpin」,30,12.5);

分析:用臨時物件給good1賦值,臨時物件必須產生。過程是先呼叫建構函式,生成臨時物件,呼叫賦值運算子過載,給good1賦值,臨時物件析構。

(3) cgoods good1;

good1 = (cgoods)(「shangpin」,30,12.5);//強轉,存在逗號表示式;

等同於:good1 =(cgoods)12.5;//顯示生成臨時物件

(4)其他型別轉換為類型別:看該類有沒有建構函式,以其他型別作為引數,若有該建構函式,則可以轉換。

cgoods

good1 = 89.5//若有該建構函式則可以轉換,隱式生成的臨時物件都是常物件。常物件要用常引用

(5)cgoods *p = &cgoods (「shangpin」,30,12.5);

//分析:產生的臨時物件在該語句結束時析構,p指向一塊無效的記憶體,不能用指標指向乙個臨時物件

cgoods &p = cgoods(「shangpin」,30,12.5);

//分析:臨時物件的週期提公升為引用變數的生存週期,即引用之後,臨時物件並不馬上析構,生存週期和引用變數相同。

(6)void test(cgoods *p)//此處傳指標會不會出錯

{} // 不會,test執行結束,臨時物件才析構

int main()

test(&cgoods(「shangpin」,30,12.5);//作用域

*explicit關鍵字:明確的,禁止隱式物件的生成,一般是給建構函式和拷貝建構函式加。

2.函式返回物件,臨時量的分析

函式返回物件,不管該物件占用多大記憶體,都會產生臨時量

*在乙個函式的呼叫點之前,一定要看到函式的宣告或定義。

確定:(1)實參匹配形參的型別,個數;

(2)函式呼叫點返回值的型別和函式宣告或定義時返回值的型別是否匹配;

(3)根據返回值型別確定返回方式;

對於c語言(自定義型別):

struct data

int a;

int b;

char c;

}//12位元組,會產生臨時量

data func();

int main()

data data;

data = func();//編譯時,編譯器給func()壓入了引數,如果只是呼叫func()不壓引數沒關係,但若使用了func的返回值,一定要有引數將臨時量的位址返回

(1) test getobjct(test t)//test&t少乙個新物件的產生

int value= t.getvalue();

test tmp(value);

return tmp;//拷貝構造臨時物件

int main()

test t1(10);

test t2;

t2 = getobject(t1)//產生臨時量

函式棧幀的開闢:

總結:返回乙個物件時,應該返回乙個臨時物件,當接收乙個返回物件的返回值的時候,應該定義時直接得到返回值(即處理成乙個初始化的過程),效率更高

c 物件導向程式設計 物件導向

什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...

C 物件導向

它定義了類的物件包括了什麼屬性,以及可以執行哪些操作 呼叫函式 class box 關鍵字 public 確定了類成員的訪問屬性.在類物件作用域內,類的外部是可訪問的 也可以指定類的成員為 private 或 protected box box1 宣告物件 box1,型別為 box box box2...

c 物件導向

0,類變數的申明可以不賦初始值 int 型別的為0,引用型別預設值為null,bool型別為false 1.物件導向的三大特點 封裝 0增加安全 1 良好的封裝能夠減少耦合 2 類內部的實現可以自由地修改 3 類具有清晰的對外介面 繼承 子類是乙個物件,父類的成員只是子類的引用 在繼承時子類的訪問修...