1.關於函數地址
class A {public:void f(){int f = 0;}void h(){int h = 0;}virtual void g() = 0;};int main(){cout<<&A::f<<endl; // 輸出結果:1cout<<&A::h<<endl; // 輸出結果:1cout<<&A::g<<endl; // 輸出結果:1return 0;}
解釋:代碼中輸出的不是函數的地址。事實上沒有什麼通用的方法可以得到成員函數的地址。cout不知道怎麼輸出成員函數的地址,於是將成員函數的地址轉換為另一個類型(即bool型)輸出。成員地址均非零,因此輸出1。2.char (*(*x[3])())[5],x是什麼類型?參考http://topic.csdn.net/u/20120926/10/6b423fa9-e7c9-4584-b7b7-63607657e21d.html?54424*(short *)&byte[0]是什麼意思?參考http://topic.csdn.net/u/20120927/16/03b87825-0650-43c7-b3c1-ef955cfc863c.html?9294
3.結構體的賦值:
people Jack = {180.5, 179.2, "Jack", "濟南"};
Mike = Jack;
4.一個類的成員變數列表中包含另一個類的對象,叫做包含(包容)。
10.傳遞數組的3種方式
1)void func(int a[]);
2)void func(int a[5]);
3)void func(int *a);
void func1(int a[], int n);void func2(int a[5], int n);void func3(int *a, int n);int main(){int a[10], i;for(i = 0; i < 10; i++)a[i] = i + 1;func1(a, 10);func2(a, 10);func3(a, 10);return 0;}void func1(int a[], int n){int i;for(i = 0; i < n; i++)cout<< a[i] << ' ' ;cout<<endl;}void func2(int a[5], int n){int i;for(i = 0; i < n; i++)cout<< a[i] << ' ' ;cout<<endl;}void func3(int *a, int n){int i;for(i = 0; i < n; i++)cout<< a[i] << ' ' ;cout<<endl;}
輸出:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
5.
#include<stdio.h>union myun{ struct { int x, y, z; }u; int k;}a;int main(){ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf("%d\n",a.u.x);}
分析:輸出0
x和k共用一個儲存單元,語句a.k=0;覆蓋掉了a.u.x的值。
6.delete和delete[]的區別:
delete
p 是刪除釋放一個單元,delete [] p 是釋放 多個單元,具體的資料目是查系統的分配表得到的。
對於內建類型來說,delete和delete
[]是一樣的
事實上new和delete都是兩步操作,分配(釋放)堆記憶體和調用構造(析構)函數,對於堆記憶體的釋放,確實不需要做額外的事情,delete和delete []無差別,區別就在於調用解構函式這一步,如果用delete只會調用第一個對象的析構,只有調用delete[]才會調用全部的析構
11.基類的虛函數不進行執行個體化,就是抽象類別。抽象類別又叫ADT,它不能用來建立具體的對象
有純虛函數的類都是抽象類別
從抽象類別派生出的新類必須為每個純虛函數賦予功能,否則仍只是一個抽象類別
不能定義一個抽象類別的對象,只能定義一個指向抽象類別的指標
指向抽象類別的指標可以動態地指向其子類的對象,從而實現程式的多態
12.virtual float length() = 0;
像這個在虛函數後面加個“=0”,就是純虛函數
純虛函數徹底無任何功能,也不能直接調用,只能被子類繼承並賦予新功能後才能使用
13.在一個類中定義了一個新的類型,這個類型只能在該類用使用。新類型稱為嵌套類
14.endl在執行時,做兩件事情:
1)輸入'\n'
2)重新整理緩衝區flush()
解釋:執行分行符號\n與執行結束符endl,最大的區別在處理檔案上,以檔案輸出資料流(ofstream)為例。
當流的緩衝區未滿時,執行'\n'是不會馬上寫到檔案裡。但是執行endl會強行把緩衝區裡的內容寫入檔案中。
15.輸出資料到檔案的步驟:
1)包含標頭檔stream
2)建立ofstream對象:ofstream ocout;
3)將對象與檔案關聯:ocout.open("123.txt");
4)使用該對象輸出資料:ocout<<"abc";
5)關閉與檔案的串連:ocout.close;
16.讀取檔案中資料的步驟:
1)包含標頭檔stream
2)建立ifstream對象:ifstream icin;
3)將對象與檔案關聯:icin.open("123.txt");
4)使用該對象輸入資料:icin>>temp;
5)關閉與檔案的串連:icin.close;
17.將資料輸出到檔案時,可以選擇兩種輸出方式:
1)二進位:空間小,速度快,精度高
2)檔案:便於閱讀,可直接編輯,可移植性強
18.同時開啟檔案的數目跟所作業系統而定,一般20個左右