1、類物件模型
(1)如何計算類物件大小
類中既可以有成員變數,又可以有成員函式,那麼乙個類的物件中包含了什麼?如何計算乙個類大小呢?
#include
#include
using
namespace std;
class
aprivate
:char _a;
//成員變數};
intmain()
2、this指標
(1)先來看乙個簡單的日期類
class
date
void
setdate
(int year,
int month,
int day)
private
:int _year;
//年int _month;
//月int _day;
//日}
;int
main()
可以看出date類中有兩個成員函式,應該是顯示日期的display和設定日期的setdate,函式體重也沒有關於不同物件的區分,那麼當s1呼叫setdate函式時,函式是如何知道應該設定s1物件,而不是設定s2物件呢?
所以在c++中,引入了this指標來解決該問題,就業就是:c++編譯器個每乙個成員函式增加了乙個隱藏的指標引數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式中所有成員變數的操作,都是通過該指標去訪問。只不過所有的操作對使用者來說都是透明的,意思就是使用者不用刻意的去傳遞這個引數,編譯器會自動完成。
(2)this指標的特性
class
date
void
setdate
(int year =
1990
,int month =1,
int day =1)
void
print()
private
:int _year;
//年int _month;
//月int _day;
//日}
;int
main()
3、引用
(1)概念:引用不是新定義乙個變數,而是給已經存在的變數取乙個別名,編譯器不會為了引用變數開闢空間,它和它的引用的變數共用同一塊記憶體空間
型別& 應用變數名(物件名) = 引用實體
void
print()
注意:引用型別必須和引用實體是同種型別的
(2)引用特性
void
test()
(3)使用場景:(1)做引數 (2)做返回值做引數:
void
swap
(int
& left,
int& right)
做返回值
int
&testrefreturn
(int
& a)
int
&add
(int a,
int b)
intmain()
注意:如果函式返回值,離開函式作用域後,其棧上的空間已經還給了系統,因此不能用棧上的空間作為引用型別返回。所以以引用型別返回,返回值的生命週期必須不受函式的限制(返回值的生命週期必須比函式的生命週期長)
(4)傳值和傳引用的效率比較
傳值和傳引用作為引數時和返回值:
struct a
;a a;
a test1()
//傳值做返回值
void
test2
(a a)
//傳值作為引數
a&test3()
//傳引用作為返回值
void
test4
(a& a)
//傳引用作為引數
void
test()
size_t end1 =
clock()
; size_t begin2 =
clock()
;for
(size_t i =
0; i <
100000
;++i)
size_t end2 =
clock()
; size_t begin3 =
clock()
;for
(size_t i =
0; i <
100000
;++i)
size_t end3 =
clock()
; size_t begin4 =
clock()
;for
(size_t i =
0; i <
100000
;++i)
size_t end4 =
clock()
; cout <<
"傳值作為返回值test1-time:"
<< end1 - begin1 << endl;
cout <<
"傳引用作為返回值test3-time:"
<< end2 - begin2 << endl;
cout <<
"傳值作為引數test2-time:"
<< end3 - begin3 << endl;
cout <<
"傳引用作為引數test4-time:"
<< end4 - begin4 << endl;
}int
main()
執行結果:
結論:傳值和傳傳引用在作為傳參以及返回值型別上效率相差很大。
(5)應用和指標的區別
理論上應用就是乙個別名,和引用實體共用同一塊空間,所以二者的位址都是相同的。
int
main()
來看一下反彙編**:
引用和指標的不同點:
如有見解,請不吝賜教,感激
LUA入門基礎知識點
lua執行的每段 例如乙個源 檔案或在互動模式中輸入一行 都可以稱為乙個程式塊。乙個程式塊也就是一連串的語句或者是命令。另外和c不同的是,c中的沒行語句在結束的時候都要輸入英文符號的分好作為結束標誌,但是在lua中,幾條連續的lua語句之間並不需要分隔符,當然也可以出現。例如 a 1 b a 2 a...
C 基礎知識點
1.單行注釋 多用於給變數注釋 2.多行注釋 多用於大段文字注釋 3.文件注釋 多用於給類和方法注釋 只能以字母 或者 符號開頭。開頭暫時不要用,它們有自己特殊的意義 後面可以跟任意的字母數字下劃線 命名法 1 camelclass駝峰命名法 變數名首單詞的首字母小寫,其餘的每個單詞的首字母大寫eg...
C 基礎知識點
主要包含c 常用語句 語言特徵 物件導向程式設計基礎 集合和索引。c 常用語句 物件導向程式設計基礎 高階程式設計 多重介面實現,c 不允許多重類繼承,但c 允許多重介面實現,定義時基類必須在介面之前,如 public class mobile phone,iusb,ibluetooth publi...