给c++跪了.cpp

来源:互联网 发布:网络摄像机厂家 编辑:程序博客网 时间:2024/05/02 16:26
#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.7NewDelete(申请动态内存)    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++112.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 int n = 200;  //在编译阶段发生了替换    //所以const永远不会发生改变#endif//该看day2.8//测试#include <iostream>#include <stdio.h>#include <math.h>using namespace std;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;    }int main(){    zuobiao *p = new zuobiao{1,2};    cout<<p->x<<" "<<p->y<<endl;    cout<<(*p).x<<" "<<(*p).y<<endl;}
原创粉丝点击