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;
};
(持续更新中....)