C++知识点打结(一)
C++知識點打結(一)
- 1. 類初始化過程
- 2. 數組地址
- 3. 進制
- 4. 正則表達式匹配符
- 5. strlen & sizeof
- 6. 繼承
- 7. 打印時格式化字符串
- 8. 浮點數
- 9. 友元
- 10. Char
1. 類初始化過程
類的初始化過程也就是方法執行的過程。
父類的靜態域-子類的靜態域 父類的非靜態域-父類的構造函數 子類的非靜態域-子類的構造函數 規律就是 父類先于子類 靜態的先于非靜態的
其中靜態域包含靜態代碼塊與靜態方法,這個誰在前面,則先執行誰。
構造函數先調用基類的,再調用派生類的,析構函數相反。
2. 數組地址
int a[2][3] = { {1,2,43},{54,22,12} }; &a + i = a + i * sizeof(a); a + i = a + i * sizeof(a[0]);&a[0][0]得到的是首元素的地址,
&a[0][0]+4 * i得到的是i行首元素的地址
&a[0][0]+4 * i+j得到的是s[i][j]的地址&s[i][j]
*(&a[0][0]+4 * i+j)得到的就是s[i][j]的值。
這道題的另外一種寫法就是(*(a+i)+j)
當a為數組名時,可以當做一維指針進行取值運算,但是由于數組名等同于常量指針,所以不可以對數組名進行賦值運算。
所以當a為數組時, a=任意表達式 這樣的計算都是非法的。
而*a++,其中自增 a=(a+1), 所以這種表達式一樣是非法的,編譯的時候會報錯。
(pa++)=3;將該值變為原來的3倍,也就是數組a的第一個值為4.5;
由于pa++之后pa指針移動了size(float)個字節,所以pa指向a[1],所以值為2.5。
3. 進制
13*14=204在某進制下成立?
八進制13轉十進制:18+3=11
八進制14轉十進制:18+4=12
11*12=132
八進制204轉十進制:288+0*8+4=132
所以:(1x1+3x°)* (1x1+4x°) = 2x2+0x1+4x°
(x+3)(x+4)=2x2+4
x2+7x+12=2x2+4
x2-7x=8
x*(x-7)=8
x?=8 x?=-1
解二元一次方程組 得到 8 【x代表進制】
4. 正則表達式匹配符
\d 匹配一個數字字符。等價于 [0-9]。
\D 匹配一個非數字字符。等價于 [^0-9]。
\f 匹配一個換頁符。等價于 \x0c 和 \cL。
\n 匹配一個換行符。等價于 \x0a 和 \cJ。
\r 匹配一個回車符。等價于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。
\t 匹配一個制表符。等價于 \x09 和 \cI。
\v 匹配一個垂直制表符。等價于 \x0b 和 \cK。
\w 匹配字母、數字、下劃線。等價于’[A-Za-z0-9_]'。
\W 匹配非字母、數字、下劃線。等價于 ‘[^A-Za-z0-9_]’。
5. strlen & sizeof
strlen 是函數,sizeof 是運算符。
strlen 測量的是字符的實際長度,以’\0’ 結束,也就是說不算最后的’\0’;
而sizeof 測量的是字符的分配大小,包括最后的’\0’;
幫助記憶的話,可以理解成運算符更加底層一下,會輸出真實的內存占用情況,而函數有封裝,會處理成用戶想要看到的內容。
帶#的肯定是預編譯指令了;sizeof為操作符,與+,-,這一類的一樣,malloc為函數,參數為字節數,返回一個void
指針。
6. 繼承
一個派生類繼承了所有的基類方法,但下列情況除外:
- 基類的構造函數、析構函數和拷貝構造函數。
- 基類的重載運算符。
- 基類的友元函數。
公有繼承(public):當一個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過調用基類的公有和保護成員來訪問。
保護繼承(protected): 當一個類派生自保護基類時,基類的公有和保護成員將成為派生類的保護成員。
私有繼承(private):當一個類派生自私有基類時,基類的公有和保護成員將成為派生類的私有成員。
7. 打印時格式化字符串
“-6.2e”的意思:“6”表示要輸出的字符的最小數目。如果輸出的值短于該數,結果會用空格填充(跟對齊方式有關)。
如果輸出的值長于該數,結果也不會被截斷。“.2”表示輸出2位小數(四舍五入),不足時后面添0;對字符串,表示截取2個字符。“e”表示用指數形式輸出。“-”表示在數據不足指定位數時,采用左對齊方式,即數字(字符)往左靠。默認為右對齊。
所以218.83指數表示,2位小數為2.19e+02
在"%"和字母之間***數字表示最大場寬。例如: %3d 表示輸出3位整型數, 不夠3位右對齊。%9.2f 表示輸出場寬為9的浮點數, 其中小數位為2, 整數位為6,小數點占一位, 不夠9位右對齊。%8s 表示輸出8個字符的字符串, 不夠8個字符右對齊。
如果字符串的長度、或整型數位數超過說明的場寬, 將按其實際長度輸出。但對浮點數, 若整數部分位數超過了說明的整數位寬度, 將按實際整數位輸出;若小數部分位數超過了說明的小數位寬度, 則按說明的寬度以四舍五入輸出。
另外, 若想在輸出值前加一些0, 就應在場寬項前加個0。例如: %04d 表示在輸出一個小于4位的數值時, 將在前面補0使其總寬度為4位。如果用浮點數表示字符或整型量的輸出格式, 小數點后的數字代表最大寬度,小數點前的數字代表最小寬度。
例如: %6.9s 表示顯示一個長度不小于6且不大于9的字符串。若大于9, 則第9個字符以后的內容將被刪除。
可以在"%"和字母之間加小寫字母l, 表示輸出的是長型數。
例如: %ld 表示輸出long整數%lf 表示輸出double浮點數
可以控制輸出左對齊或右對齊, 即在"%“和字母之間加入一個”-" 號可
說明輸出為左對齊, 否則為右對齊。例如: %-7d 表示輸出7位整數左對齊%-10s表示輸出10個字符左對齊
8. 浮點數
一個浮點數由三部分組成:符號位S、指數部分E(階碼)以及尾數部分M。
單精度浮點數(float)總共用32位來表示浮點數,其中尾數用23位存儲,加上小數點前有一位隱藏的1(IEEE754規約數表示法),2^(23+1) = 16777216。因為 10^7 < 16777216 < 10^8,所以說單精度浮點數的有效位數是7位。考慮到第7位可能的四舍五入問題,所以單精度最少有6位有效數字(最小尺寸)。
同樣地:雙精度浮點數(double)總共用64位來表示浮點數,其中尾數用52位存儲, 2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以雙精度的有效位數是16位。同樣四舍五入,最少15位。
9. 友元
友元是一種定義在類外部的普通函數,但它需要在類體內進行說明,為了與該類的成員函數加以區別,在說明時前面加以關鍵字friend。
友元不是成員函數,但是它可以訪問類中的私有成員。
友元的作用在于提高程序的運行效率,但是,它破壞了類的封裝性和隱藏性,使得非成員函數可以訪問類的私有成員。
10. Char
char a =‘\82’,定義字符量a,char型變量值為1個字節長度,并從右側開始運算,所以a的值應為’2’
由于unsigned char的取值范圍在(0…255),i++以后i又為0了
char 整數范圍為-128到127( 0x80__0x7F),
而unsigned char 整數范圍為0到255( 0__0xFF )
總結
以上是生活随笔為你收集整理的C++知识点打结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java如何向服务器传文件,详解Java
- 下一篇: s3c2440移植MQTT