const
- 類const成員通過構造函數(shù)初始化
- const修飾的對象只能調用const修飾的函數(shù)纽甘,若類同時有const fuc1函數(shù)和普通函數(shù)fuc1,則const對象調用const函數(shù)超升,普通對象調用普通函數(shù)产捞。若只有一個fuc1愈涩,則不管對象是不是const都調用const函數(shù)
指針
變量的指針表示數(shù)據(jù)在內存中的第一個字節(jié)的地址,所以指針的聲明需要加上類型喳钟,以確定要讀取首字節(jié)開始讀取多少個字節(jié)的數(shù)據(jù)律想。
指針的+1代表了同類型的下個數(shù)據(jù)的地址
int a[n];
int * p = a;//a表示了數(shù)組第一個字節(jié)的地址,所以可以直接賦值
*p;//a[0]
*p+1;//a[1]
*p+2;//a[2]
動態(tài)局部變量的指針不能作為返回值流济,因為子函數(shù)會在return之后回收內存锐锣,所以指針指向的數(shù)據(jù)是不安全的。
如果是通過new初始化的變量绳瘟,則因為只有delete才會釋放內存雕憔,所以其作為返回值是安全的。
函數(shù)指針
將函數(shù)作為參數(shù)傳遞
using namespace std;
int compute(int a, int b, int (*func)(int, int))
{
return func(a, b);
}
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int result = compute(2, 3, max);
cout << result;
}
由于函數(shù)名和數(shù)組名一樣糖声,都表示首地址斤彼,所以&max和max效果相同
動態(tài)數(shù)組
int input;
cin >> input;
int* a = new int[input];
delete[] a;
數(shù)組的delete要加[],不然的話只是釋放了數(shù)組的第一個元素,而其他元素沒有釋放內存
vector
vector<int> array(5);//容量為5的數(shù)組
for(int& e:array)
{
cout<<e;
}
用起來和普通數(shù)組一樣姨丈,還不用擔心內存
淺層復制與深層復制
淺層復制:
復制對象時使用默認構造函數(shù)畅卓,使兩個對象的成員一一對應,當有成員是指針時蟋恬,由于被復制共享的原因翁潘,使得同一個指針被多次delete,使得程序運行出錯歼争。
深層復制:
為了解決淺層復制時指針的問題拜马,需要自己寫復制構造函數(shù)渗勘,使得復制的是值而不是指針。
移動構造函數(shù)
IntNum(IntNum && n): xptr( n.xptr){ //移動構造函數(shù)
n.xptr = nullptr;
cout << "Calling move constructor..." << endl;
}
&&表示右值引用俩莽,即馬上要消亡的值
移動構造函數(shù)在右值引用時觸發(fā)