c 入門 基礎知識點(2)

2021-09-28 20:59:53 字數 3460 閱讀 4997

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...