C++ 备忘

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一个构造函数,要想使友元也不能访问,只声明,不定义。(链接时将报错) 
    


成员函数指针,虚成员函数的指针

#include <iostream>
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。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值