1. C++ 整數類型範圍ios
能夠參照頭文件limits.h定義的宏c++
#define INT_MAX 2147483647(32bit, 最大10位十進制)程序員
#define UINT_MAX 4294967295U(32bit, 最大10位十進制)express
#define LLONG_MAX 9223372036854775807LL(64bit, 最大19位十進制)數組
#define ULONG_MAX 18446744073709551615UL(64bit, 最大20位十進制)安全
2. 防止頭文件被包含屢次app
頭文件中每每這樣寫函數
#ifndef HEADERFILENAME_Hspa
#define HEADERFILENAME_H設計
....your code
#endif
3.變量是這樣聲明的
extern int e; 咱們通常不會extern int e=1; 由於這樣就算是直接定義了e,不必了;同一個做用域能夠聲明屢次,但只能定義一次。
4.string 的通常用法
string s1,s2("string"),s3(s2),s4(5,'c'),s5(s2.being(),s2.end());
char* cp = 「string」;
char c_array[] = 「string」;
char sb [] = {‘s’,’b’};//無結尾字符數組
string s6(cp), s7(c_array), s8(c_array,c_array+1);
string s9(sb);//runtime error
if(s1.empty()){
string::size_type size = s1.size();
cout<<size<<endl;
}
cout<<s1<<","<<s2<<","<<s3<<","<<s4<<endl;
ifstream fin("a");
while(getline(fin,s1)){
cout<<s1<<endl;
}
fin.close();
s1 = s2;// first free s1's memory, second new a memory for s1, third copy data from s2 to s1.
s1 += s2;
s1 += "...";
//一些方法
<cctype>包含了不少字符操做方法
c_str(); 返回const char*
Insert,assign//替換,erase,substr(pos,n),find,append,replace
Rfing//最後一次出現的位置,find_first_of(args)//args中任意字符第一次出現的位置,find_last_of(args)//args中任意字符最後一次出現的位置,find_first_not_of(args)//對象中第一個不屬於args的字符,find_last_not_of(args)//對象中最後一個不屬於args的字符。
Compare
5. 指向常量的指針和常指針
const int * p = π//常量的指針,不能經過p改變pi的值。Pi能夠是常量或者是變量。
Int * const p = π//常指針
6. 數組初始化
Char a[5] = {0}; 一個定長空串,全是\0
Int a[3] = {1}; 其他會初始化爲0;
Int a[2][3]={{1,2,3},{2},{1,2}};//按行初始化,每行其他是0
Int a[2][3]={1,2,3,4,5};//所有按地址順序初始化,其他是0
7. 函數指針
bool (*pf)(const string &); //定義一個參數爲一個常字符串引用返回類型爲bool類型的函數指針。
typedef bool (*pf)(const string &); //pf 能夠定義函數指針
若是定義了bool myfun(const string &);
那麼咱們能夠這樣獲取函數地址:
pf test = myfun;或者pf test = &myfun;
8. 返回引用
返回引用能夠避免一些對象的拷貝,節約內存以及開闢內存的時間。固然返回引用也有其特別的地方,就是有時候能夠作左值:
char &get_val(string &s, string::size_type x){
return s[x];
}
那麼你能夠這樣調用他:
string s=」1234」;
get_val(s,0) = ‘a’;//s的值爲」a234」
若是不想讓其成爲左值,那麼參數要聲明爲「const string & s」
注意:不要返回臨時對象的引用和指針!
9. 靜態變量是被自動初始化的
10. for循環定義的迭代變量是局部的
for(int i=0;i<2;i++){
for(int i=0;i<2;i++){
cout<<i;
}
}
0101
11. palcement new 的使用
palcement new之因此有好處是由於他能夠把對象放在一片指定的內存之中,若是這個對象建立刪除比較頻繁他會比普通的new有很大優點。普通的new須要從新尋找一片足夠大的連續內存才行。
12 c++方法隱藏
隱藏就是說方法看不到了,這種狀況出如今子類實現了與父類同名的函數(參數不一樣也能夠)。看下面的例子:
class Sup{
public:
virtual int test() {cout << "super" << endl;}
};
class Sub: public Sup{
public:
int test(int i) {cout << "sub:int"<< endl;}
int test(double i) {cout << "sub:double" << endl;}
};
int main(){
Sub s;
s.test();
}
這樣編譯不會經過,緣由以下:c++在設計時出於安全考慮,他認爲實現子類的人有可能不知道父類的方法,由於在調用的時候會調用匹配度最高的方法,因此在調用d.test()時極可能是程序員寫錯了而無心間調用了父類方法,這樣錯誤很難排查,因此乾脆吧父類同名方法隱藏。因此在編譯時會報錯,d找不到相應的方法。
若是你非要用Base裏面的方法,能夠顯示的在子類加上一句
class Sub:public Sup{
public:
int test(int i) {cout <<"sub:int" <<endl;}
int test(double i) {cout <<"sub:double" <<endl;}
using Sup::test;
};
(持續更新中....)