c++知识点大全(基础与提高)

原文出处:www.404notfind.xyz

#if 0
#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
using namespace std;
2.2cout控制输出长度.格式:
    cout<<setw(8)<<a<<endl;   //setw()在头文件<iomanip>中,只能右对齐,等价%8d
    cout<<setiosflags(ios::left)<<setw(8)<<a<<endl;//这样为左对齐
    cout<<setw(8)<<setprecision(2)<<setiosflags(ios::fixed)<<b<<endl;//b是一个浮点数,等价于%8.2f
    cout<<setfill('x')<<set(8)<<a<<endl;//将空白用x填充
    cout<<hex<<a<<endl;//等价于printf("%x\n",a);十六进制
    cout<<oct<<a<<endl;//等价于printf("%o\n",a);八进制
    cout<<a<<endl;//等价于printf("%d\n",a);十进制
    //做一个时钟
2.3函数重载(静多态)
    //匹配原则 1.严格匹配 2.隐式转换(小到大可以,大到小不可以)寻求匹配,找到则匹配 3.返回值不构成重载
    extern "C"{}//语句,将括号内按c的方式编译,不与其他同名函数重载。c库每一个头文件都有 :
    //---------------------------------------------------------
    #ifdef __cplusplus//如果是c++编译器
    extern "c"{
    #endif // __cplusplus

    #ifdef __cplusplus
    }
    #endif          //表示不使用c++的重载特性
    //----------------------------------------------------------
2.4运算符重载(Operator Overload)
    //运算符其实就是函数
    struct zuobiao  //坐标
    {
        int x;int y;
    };
    zuobiao operator + (zuobiao a,zuobiao b)
    {
        zuobiao c;
        c.x=a.x+b.x;  c.y=a.y+b.y;
        return c;
    }
2.5默认参数(Default Parameters)
    //参数只能从右往左默认,中间不能跳跃
2.6引用(Raference)
    //&前为类型名时为引用,其他均为取地址
    //变量名,本身是一段内存的引用,即别名(alias)。此处引入的引用是为已有变量起一个别名,声明如下
    int a;
    int &ra=a;
    //1引用是一种声明关系,必须初始化,引用不开辟空间
    //2此种声明关系一经声明 不可变更
    int &rr=ra;
    //3可以对引用,再次引用。多次引用的结果,多个引用指向同一个变量
    //引用的本质是对指针的包装,指针可以有引用,但不应该有引用的指针
    //应用   不开辟内存空间
    swarp(int &ra,int &rb)//^异或运算符  交换两个参数的值
    {
        ra^=rb;
        rb^=ra;
        ra^=rb;
    }
    //const int&ra=a; 能用const就用;use const whatever possible
    //思考:引用的本质是什么?  int & ra = a;   int * const p = &a;  引用的本质是不可以修改指向的指针;
2.7 NewDelete(申请动态内存)
    int *p = new int(200);   //开一个int类型单变量并初始化为200
    int *ps = new string("hellwo world");//开一个string类型单变量并初始化为 hellow world
    int *p1 = new int[5]{
  0};//开一个int数组 每一项初始化为0;
    int **pp = new int*[5];//指针数组,存放的指针
    int (*p)[4] = new int[3][4] {
  {
  0}};//p是一个指针 它指向包含4个int元素的一维数组 p为首地址 记不住怎么写编译器可以给你提示
    //也可以new一个结构体  但初始化应用 {} 因为可能有有多个值
    /*应用程序在内存中分为
     代码区、
     全局(静态)数据存储区、
     栈区、
     堆区。
     通过new出来的内存在堆区。
     局部变量,函数参数等存在栈区*/
    int *p = new int ;
    delete p;
    int *p=new int[5];
    delete []p;
    int (*p)[4][3]=new int[5][4][3];
    delete []p;
    //异常处理  new很少出错 一般别用
    int *p = new(std::nothrow) int ;
    if(p == nullptr){
  return -1}//NULL 好像变成nullptr了c++11
2.8内联函数(Inline Function)
    inline int sqr(int i)
    {
        return i*i;
    }//inline 是给编译器的一种建议,编译器来决定是否inline,但你不说编译器一定不inline    66666
    //适用环境 函数体很小 且 频繁使用
2.9Cast c++中的强制类型转换
    int a=5;    float b=6.5;
    static_cast //对于隐式类型可以转化的,可用这个
    b=static_cast<float>(a);  //作者不想让你强转,所以搞这么麻烦 哈啊哈
    void *p;int *q;
    p=q;//可以
    q=p;//不可以 q=static_cast<int*>(p);OK
    dynamic_cast
    reinterpret_cast //对于无隐式类型的转化,static_cast无效,例如将int赋值给int*指针  reinterpert重新解释
    const_cast //脱常   只能用于指针和引用
    void fun1(int & v)
    {
        cout<<v<<endl;
    }
    int main()
    {
        const int a;
        fun1(a);        //这是传不进去的
        fun1(const_cast<int &>(a));//这样就传进去了  不要妄图用这个方法修改const  其行为是未定义的且没有意义
        return 0;
    }
2.10 Const
    #define N 200       //宏,在预处理阶段发生了替换
    const 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值