• C++ 的一些概念(2)。


    静态数据成员:就是说所有这个类的对象,都公用这个数据成员,你变了一个对象的静态成员的值,那么所有的都跟着变了。比如说:

    class Clock{
    int Hour, Minute;
    static int Second; //定义了一个静态成员
    }

    // 函数中调用时:
    Clock c1,c2,c3;
    //这三个实体共用Second这个数据,变一个等于全变。
    //直接调用时:
    Clock::Second

    静态函数成员:一般用来访问静态数据成员,就是说不用定义实体,也可以去访问它。而一般函数成员只能通过实体来访问。如果想要利用静态函数来访问非静态数据,就必须要通过参数,比较麻烦,也不推荐。

    Class Clock{
    public
    static int getSecond();//定义一个静态函数成员
    private:
    static int Second;
    }

    //调用时,可以直接访问:

    Clock::getSecond();

    友元函数:定义类的时候,我们是定义一种客观存在的物体,比如一个人,一辆车,但是有一些抽象的物体,比如亲戚关系等,它没有实体,并且很难形成一个类,友元函数就是为了定义这种关系而存在的。比如之前定义了表,但是不同时区有时差,要计算两个实体表中的时差,不能专门建立一个类去做这个事情,但是又需要去算,并且涉及到了俩个表呢,放在Clock的类里面又显得有点不伦不类,so,就在函数前面加一个friend 关键词,意思就是,这个函数定义在类外,用来表示类之间的关系

    Class Clock{
    int Hour, Minute, Second;
    public:
    friend int timeLag(Clock &c1, Clock &c2);
    //其他函数略了
    }
    //调用时,不需要应用实体:
    Clock c1(1,1,1);
    Clock c2(2,2,2);
    int lag=timeLag(c1,c2);

    友元类: 这个东西比较纠结,就是比如我在类B里面定义了一个友元类A,那么就是说类B是信任类A的,类A此时就嚣张了,可以访问类B的私有和保护成员。同时,作为我信任你的一点回馈吧(天啊这不是司马懿么3_3),类A的函数就都是类B的友元函数。(真纠结啊 = = )

    要注意的三点:1.友元关系不能传递,可以这么表述:A=B  B=C 但 A!=C  . 2.友元关系是单向的。3. 友元关系不被继承。

    Class B{
    private
    ....
    friend class A;//此时类A是类B的友元类
    ....
    }

    常引用:函数的参数类型前面加个const,那么这个参数不能被更新,用了什么就是什么了。

    常对象:对象名前面加个const,那么这个对象必须初始化,并且不可以被更新。

    void  display(const char &a){
    cout<<a<<endl;
    }
    //引用时 只能给a赋一次值

    int const pie=3.14;
    pie=2; // nonono you can't


    常成员函数:就是在函数声明后面,分号前面加个const,这个函数就成了常成员函数,它只能调用常成员函数不可以更新类的数据成员。如果一个对象是常对象,那么这个对象只能调用它的常成员函数。同时,他可以用于重载区分,举个例子:

    Class A{
    private:
    int a,b;
    public:
    void func();
    void func() const; // 这就是常成员函数了
    ...//其他函数省略
    }
    // 写函数时,对于常成员函数要写明:

    void A::func() const{ //const 不可少,否则就变成了第一个函数
    .......
    }

    //调用时:

    A test1(2,2);
    const A test2(5,5);
    test1.func(); //调用void func();
    test2.func(); //调用void func() const;

    常数据成员:如果一个数据成员前面加了const,那么任何函数不可以对这个成员赋值,只能通过构造函数初始化。


    关于几个预编译中的关键字:

    #include   这个谁都知道  一般分两个格式: <文件名>   “文件名”   两者不同之处是:前者为标准搜索,文件在include子目录下;后者先在当前目录搜索,没有再按标准搜索,所以同一目录下,用双引号,外面的文件,用<>。

    #define 定义符号常量  例如  #define PI 3.14,但是用const int PI=3.14会更好点。

    #undef  删除#define定义的宏,这之后#define定义的宏就废了。

    #if 等,条件编译指令,就是说达到某些条件时才参与编译。可以使编译在不同条件下产生不同目标代码,其实吧。。我觉得不大常用,调试的时候用用?反正作为一个普通的coder我没用过啊~

  • 相关阅读:
    pip或easy_install安装库报错:SSL: CERTIFICATE_VERIFY_FAILED
    js 闭包
    php 安装xdebug进行调试(phpstorm)
    Linux下一个最简单的不依赖第三库的的C程序(2)
    Linux下一个最简单的不依赖第三库的的C程序(1)
    windbg .net 程序的死锁检测 常用方法(个人备份笔记)
    自定义经纬度索引(非RTree、Morton Code[z order curve]、Geohash的方式)
    通过经纬度坐标计算距离的方法(经纬度距离计算)
    根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)
    The version of SOS does not match the version of CLR you are debugging; SOS.dll版本不匹配; Dump文件不同环境mscordacwks.dll版本问题
  • 原文地址:https://www.cnblogs.com/jiaozihardworking/p/2342812.html
Copyright © 2020-2023  润新知