1:
定義一個對象時先調用基類的構造函數、而後調用派生類的構造函數;析構的時候剛好相反:先調用派生類的析構函數、而後調用基類的析構函數。
2:
多態性具體體如今運行和編譯兩個方面:在程序運行時的多態性經過繼承和虛函數來體現;
在程序編譯時多態性體如今函數和運算符的重載上;
3:
y引用: 切記要對其進行初始化
不能再把該引用名做爲其餘變量名的別名
引用自己不佔存儲單元,系統也不給引用分配存儲單元
不能創建數組的引用
4:注意當數組做爲函數的參數進行傳遞時,該數組自動退化爲同類型的指針。(均可以利用下表訪問具體某一個字符可是指針不能夠經過下表更改內容)
char a[] = "hello world";
//在程序運行時決定,有換行符,c把字符串當作字符數組來處理
char *b="zzy";
//在編譯時決定,有換行符,程序在定義字符串指針變量b時只是把字符串首地址(即存放字符串的字符數組的首地址)賦給b
char *p = a;
cout<< sizeof(a) << endl; // 12 字節
cout<< sizeof(p) << endl; // 4 字節
char str[ ]={"I am happy"};
char str[ ]="I am happy";
//==char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
//!=char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};此時用sizeof()函數能夠正確求出其所佔的內存大小;但用strlen()函數不能正確求出其長度,由於strlen是經過\0判斷字符串結束的。數組
注意:上述這種字符數組的總體賦值只能在字符數組初始化時使用,不能用於字符數組的賦值,字符數組的賦值只能對其元素一一賦值,下面的賦值方法是錯誤的
char str[ ];
str="I am happy";(錯誤)
char *P=new char[]; app
p="zfd";
strlen(p);//長度不包括結束符
可是strcpy(a,p);//又要包含p的結束符
//反正謹記:數組分配的字符串不會自動加結束符,可是字符串常量會加("zzy")
5:不能創建數組的運用,數組是若干元素的集合,沒法創建一個數組的別名
string foo( );
void bar(string & s);
bar(foo( ));
bar("hello world");//不對 ,緣由在於foo( )和"hello world"串都會產生一個臨時對象,而在C++中,這些臨時對象都是const類型的
6:
不管是靜態,局部仍是全局數組只有在定義時才能初始話,不然必須經過其它方法,好比循環操做實現。
任何
int a[3];
static int b[3];
a[3] = {1, 2, 3};
b[3] = {1, 2, 3};
沒有在定義時初始化都是錯誤的!
char *str3;str3="12345";是能夠的
7:
使用&取數組的地址,它所取的是總體數組的一個地址
8:
fun1(int *ptr)
{
ptr[1]=3;
*ptr=3;
ptr=array2;//能夠把另外一個數組名賦給ptr,由於它是一個指針
}
fun2(int arr[])
{
arr[1]=3;
*arr=3;
arr=array2;//也能夠,由於arr編譯器是按照指針的形式處理的
}函數
int arrary[100],array2[100];
main()
{
array=array2;//編譯錯誤"沒法修改數組名"
}指針