• c++ 类 总结


    #############
    ## 类
    #############
    友元(friend)、可变成员(mutable)、静态成员(static)

    构造函数:(冒号后面为初始化列表,用来初始化数据成员)
    Fun():x(5),y(10){}

    成员函数:必须在类内部声明,但是不必在内部定义。如果在内部定义,则默认为inline。

    外部定义:必须用域操作符'::'指定所属类名。例如:ClassName::fun1(){}

    struct: 如果类用该关键字定义,则默认成员是公有的。
    class :默认成员是私有的。

    类的访问符:public 、private、protected。
            访问符出现的次数、位置都没有限制;访问符限制其后定义的成员的访问级别。
    public:可以由程序的所有部分访问。
    private:只能本类内部访问。
    protected:本类已经后代类访问。

    关键字 typedef: std::string::size_type index
            typedef 给一个类型设置别名

    重载操作符:
            1、两个重载成员的形参数量和类型不能完全相同。
            2、类的成员函数只能重载类的其他成员函数,不能重载非成员函数和其他类中声明的函数。

    inline:类内部成员函数默认inline,也可以显示的指定inline
    三种方式定义内联函数:
    1、在类内部定义函数。
    2、在类内部的函数声明上用inline显示指定。
    3、在类外部的函数定义上用inline显示指定。


    类定义:一个类只能被定义一次,如果在多个文件中定义一个类,则每个文件中的定义必须相同。

    头文件保护符:header guard,保证即使头文件在同一文件中被包含多次,类定义也只出现一次。

    前向声明(forward declaraton):class Screen。Screen为类类型,它在声明后,定义前这个状态,是一个不完全的类型(incompete type)。

    不完全类型(incompete type):
            1、不能定义该类型的对象。
            2、用于定义指向该类型的指针已经引用
            3、用于声明(而非定义) 使用改类型作为形参类型或返回类型的 函数。
    类不可以具有自身类型的数据成员,但可以有指向自身类型的指针和引用。


    ####################
    ##类对象
    ####################

    1、定义类型时并不进行内存分配,当我们定义对象时会分配内存

    2、类类型的使用:
            a、将类的名字直接用作类型名。
            b、关键字class|struct + 类的名字。

    3、类定义后可以接一个对象列表,必须以分号结束。

    4、this指针:成员函数具有附加的隐含形参,即指向该类对象的一个指针-this

    5、可变数据成员(mutable data member):永远不能为const ,即使他是const对象的成员。mutable数据成员可以被const成员函数修改

    6、常成员函数:const放在参数列表后面修饰成员函数表示常成员函数
       特性:const 成员函数不能修改它所在对象的数据成员。(mutable 除外)
             const 成员函数只能访问const 成员函数,成员函数只能访问成员函数。

    7、成员访问操作符:‘.' '->' 。前者是对象访问成员,后者是对象指针访问成员

    8、‘::'类作用域限定符,可以用于在类外定义成员函数。

    9、在类作用域外定义的成员函数,需要使用完全限定名即:ClassName::fun
       函数的返回值因为在函数名前,也需要使用完全限定名。
       形参列表和函数体在函数名后,则不需要使用。

    10、名字查找优先级:先后为所在函数体、所在类、所在文件

    #####################
    ##构造函数
    #####################
    1、构造函数初始化列表:以冒号开始,以逗号分割,每个数据成员后面用括号包含初始化式

    2、初始化const或者引用数据成员的唯一机会是在构造函数初始化列表。

    3、默认构造函数:只有没有定义构造函数时系统才会自动生成默认构造函数

    4、没有定义构造函数并且全体数据成员均为public的类,可以采用与初始化数组元素乡土的方式初始化其成员(按照声明的顺序)。例如:
       ClassName obj = {0,0};
    ################
    ##友元
    ################
    友元机制(friend):允许一个类将对自身非公有成员的访问权限授予指定的函数或类。
    特性:只能出现在类定义内部(任何地方),不受声明出现部分的访问控制影响。
    例如:
      class Screen
      {
        friend class Window_Mgr;
      }
      Window_Mgr 对象可以访问Screen的私有成员。如果Screen想访问Window_Mgr 的私有成员  则需要在Window_Mgr 中设置 friend class Screen;

      友元可以是非成员函数、其他类的成员函数、或者整个类。

    ###############
    ## static
    ###############
    1、数据成员:
       static 数据成员是与类关联的,独立于该类的任何对象。
       非static 数据成员与对象关联,存在该类的每个对象中。

    2、成员函数:
       static成员函数:没有this形参,可以直接访问所属类的static成员,不能直接使用非static成员。

    3、static成员的定义:在声明前添加static关键字。static成员遵循访问规则。

    4、static成员的使用:
       a:通过作用域操作符直接调用,Account::rate();
       b: 通过对象调用:Account act;act.rate();
       c: 通过指针调用:Account* p = &act; p->rate();

    5、外部定义static成员,无须重复指定static保留字,改保留字只出现在类定义体内部的声明处。

    6、static函数没有this指针,也不能被指明为const,也不能被声明为虚函数。

    7、static 数据成员必须在类定义体外部定义(static const 除外)。
       static 数据成员不通过构造函数初始化
       例如:int ClassName::data = initData();//类定义体外、main函数外



  • 相关阅读:
    HTML DOM教程 9HTML DOM Window 对象
    HTML DOM教程 11HTML DOM Screen 对象
    Android项目中把bin文件夹里面的.apk文件删除,怎么让它再生成
    Qt把ping www.baidu.com之后的内容的内容输出到一个名为output的文档
    Qt之QProcess 和 c语言对比
    Git的Windows版本Msysgit的中文乱码解决
    多系统 grub之ubuntu的 grub
    QT中调用外部程序:QProcess的使用
    repo的小结
    恢复Ubuntu默认的面板
  • 原文地址:https://www.cnblogs.com/lipeil/p/2869795.html
Copyright © 2020-2023  润新知