extern:
声明一个变量。 陷阱: 如果一个声明一个变量时有初始化式,那么extern将被忽略。(即他就是一个定义)
extern int var = 30 ; // defintion var
extern nt s ; // declares s
const:
const variable 具有地址。 不想有些语言那样是符号常量。
const variable的默认作用域是本编译单元(文件), 其他文件无法访问,要变成全局的用extern指定。注:非const变量默认为全局的
const int ci = 32 ; //access scope is file
extern const int eci = 12; // globle scope
Reference:
定义:在变量名的前面添加&来定义。
int i = 3 ;
int &ri = i ;
默认实参:
如果一个形参具有默认实参,那他后面的形参都要定义默认实参。
定义约束:即可才原型中指定,也可在函数定义时指定。一个文件中只能指定一次默认实参,一般是不能同时指定。(一般在函数声明是指定放在头文件中)
ptrdiff_t:
是一种机器无关的有符号整数类型。用作指针的算术返回类型
inline function:
定义函数时在返回类型前添加inline keyword,(声明函数时并不需要,加上也可以)
inline 函数与const变量有相同的性质就是作用域为本编译单位, 要想让其他编译单位可以使用要在函数定义时添加 extern (也const 变量相同)
extern inline aad() {...}
inline 函数应放在头文件中。
- 显式指定inline成员函数:与inline一样,即可在声明是指定,又可在定义式指定,同时指定也行。inline 成员函数一般放在该类定义的头文件中。
Overload:
- Function: 只有const和非const引用或指针作为参数时才可重载(即不同),其他类型的const 和非const参数相同。
- Element function: 还可以根据是否是const *this来重载。 即 Myclass& ele_func(...) ; const Myclass& ele_func(...) const ;
I/O:
cin >> std::ws ; 忽略接下来的空白字符知道下一个有效字符,仅对下一个输入有效。
int x, y ; string str ; cin >> x >> y ; cin.ws ; cin >> str ;
比如我输入 3 24 hello(按回车) 若无cin.ws 则str的值为“空格hello” 若有则为“hello” 若我输入 23 12(回车)hello 若无cin.ws 则str的值为空。 若有str为hello
CLASS:
- 构造函数初始化列表,在函数定义式指定
Myclass() : ele1(val1), ele2(val2) {..}
禁止其他函数调用类的copy构造函数,private一个构造函数,要想使友元也不能访问,只声明,不定义。(链接时将报错)
成员函数指针,虚成员函数的指针
struct A {
virtual void ok(int i) { std::cout <<"A" << i << std::endl ; }
};
struct B : public A {
B(){ok(0);}
virtual void ok(int i) { std::cout <<"B" << i << std::endl ; }
};
int main() {
void (A::*pa)(int i) = &A::ok ;
void (B::*pb)(int i) = &B::ok ;
B b ;
(b.*pa)(0x33); //B0X33
(b.*pb)(0x44); //B0x44
return 0 ;
}
1.定义成员函数指针时 变量和成员函数都要使用类名。
2 对成员函数指针的调用必须使用类对象来调用
2.虚成员函数指针和虚函数一样会找到匹配的调用函数
firnd 声明
声明Class A 是 Class B的 友员时,必须使用 class 关键字
e.g
class A{};
class B { frind class A;}
STL
<T>::size_type : 是一个机器无关的无符号整数。 是T.size() ; 的放回类型, string的下标类型。
<T>::difference_type:是一个机器无关的有符号整数类型,主要用于迭代器的算术操作返回类型。
static
主要用于控制声明对象的作用域。
一般用static声明的变量和函数只用本编译单位可见(文件)
如果在头文件中使用static定义一个变量或者函数那么,所以include此文件的其他文件都有一个自己的本地变量。
头文件中的 static inline 函数。 如果在头文件中定义一个函数,那么如果有两个以上的文件include
此定义文件在链接时就会发生多次定义的错误。这时可使用 static声明该函数,使函数只在本文件中可见。就不会报错了。
一般会把小的常用的函数声明为static inline。