• 第7章 类


    类声明:   class  Sales_data; 

    class Sales_data;                //类声明, 类似函数声明
    
    class Sales_data item1;        //定义对象   class可省略
    Sales_data  item2;               

    不完全类: 一个类被声明后, 在未定义之前的状态。

    不完全类的应用:

    1、可以定义指向不完全类型的 指针或引用,

    2、也可以声明(不是定义)以不完全类型作为参数类型或返回类型的函数。 即: 声明(非定义)一个函数时,可以参数类型和返回类型 可以是不完全类型。

    注意:在创建类对象或使用引用、指针指向类的成员(r.member  pointer.member)前,必须先定义类。所以,只有当完成类的定义后, 该类的数据成员才能被声明成这种类类型(即在定义该类时,数据成员的类型不能声明成该类型本身)。 但是如果之前已经声明过(未定义)该类(还是个 不完全类),那么在定义该类时,数据成员或 声明(非定义)成员函数时的返回类型和 参数类型,只能声明为该类型的指针或引用。

    1 class Link_screen {
    2     Screen window;
    3     Link_screen  *next;
    4     Link_screen  *prev;
    5 };

    友元类:类还可以把其他类或其他类的成员函数定义成friend  友元函数定义在类内部, 是隐式inline的。

    如果一个类指定了友元类 那么这个友元类的成员函数 可以访问 这个类的所成员 (包括私有成员),友元不存在传递性

     1 class Screen {
     2     friend class Window_mgr;       //类Window_mgr是 Screen类的 友元类
     3     
     4         //  Screen的其他成员。
     5 }; 
     6 
     7 
     8 class Window_mgr {
     9 public:
    10     using ScreenIndex = std::vector<Screen>::size_type;  // 每个窗口都有编号。下标类型
    11     void clear(ScreenIndex);   // 按照编号指定的Screen重置空白。
    12 private:
    13     std::vector<Screen>screens{ Screen(24.80, '') };
    14 };   
    15 
    16 void Window_mgr::clear(ScreenIndex i)  //函数clear可以访问Screen类的私有成员
    17 { 
    18  // 首先把s定义成screens vector中第i个位置上的Screen的引用, 随后利用Screen的height 和width计算出 一个新的string对象, 并令其含有若干个空白符, 最后把含空白的字符串赋给contents 成员。
    19     Screen &s = screens[i];
    20     s.contents = string(s.hetght*s.width, '   ');  // 将选定的Screen 重置为空白。 
    21 }
    View Code

    令成员函数作为友元:  可以只把 某个成员函数 指定为友元。   友元什么时 应该指明 成员函数属于哪个类。

    class Screen
    {
        friend Window_mgr::clear (Screenindex i);    //友元函数可以定义在类内
        
        ...
    }
  • 相关阅读:
    搜索------深度优先DFS-----模板2:例1 例2 例3 例4
    memset
    if(!a)
    bailian 2698
    皇后问题
    搜索------深度优先DFS-----模板1:例1 例2 例3 例4
    bailian 2754八皇后
    ByteCache
    Java-IntegerCache
    JVM运行时数据区
  • 原文地址:https://www.cnblogs.com/qzhj-pipeofnaturalrule/p/11246196.html
Copyright © 2020-2023  润新知