zoukankan      html  css  js  c++  java
  • 拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)

    十七 拷贝构造和拷贝赋值
    1 浅拷贝和深拷贝
    1)如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝。
    2)浅拷贝将导致不同对象之间的数据共享,如果数据存放在堆区,可能会在析构时引发"double free"异常,因此就需要自己定义一个支持复制指针指向的内容的拷贝构造函数,即深拷贝。
    
    2 在C++类中会提供一个缺省的拷贝赋值运算符函数,完成两个对象直接的赋值操作。但是它和缺省拷贝构造函数类似,也是浅拷贝,为了得到深拷贝赋值的效果,必须自己定义拷贝赋值运算符函数
    
     s2 = s3;//s2.operator=(s3)
    
     类名& operator=(const 类名& that){
        if(this != &that){//1)防止自赋值
          2)释放旧资源
          3)分配新资源
          4)拷贝新数据
        }
        return *this;//5)返回自引用
     }
        
    十八 静态成员(static)
    1 静态成员变量
    class 类名{
       static 数据类型 变量名;//声明静态成员变量
    };
    数据类型 类名::变量名 = 初值;//定义和初始化
    1)静态成员变量不属于对象,但是可以通过对象去访问它。
    2)不能在构造函数中定义和初始化,需要在类的外部单独的定义和初始化
    3)静态成员变量内存在全局区;
    4)静态成员变量可以通过类名直接访问 
       类名::静态成员变量
    5)静态成员变量在类所创建多个对象之间是共享的
    
    2 静态成员函数
    class 类名{
       static 返回类型 函数名(形参表){函数体}
    };
    1)静态成员函数没有this指针,也没有const属性
    2)可通过"类名::"直接访问,也可以通过对象访问
    注:静态成员函数只能访问静态成员
    
    3 单例模式:一个类只允许创建唯一的对象
    1)禁止在类的外部创建对象:私有化构造函数
    2)类的内部维护唯一对象:静态成员变量
    3)提供访问单例对象的方法:静态成员函数
    4)创建方式:
       --》饿汉式:单例对象无论用或不用,程序启动即创建。
       --》懒汉式:单例对象在用的时候再创建,不用即销毁。
    eg:
    class A{
    public:
       static A& get(void){
          return m_a;
       }
    private:
       A(void);
       A(const A&);
       static A m_a;
    };
    ===================
    十九 成员指针(了解)
    1 成员变量指针
    1)定义
    类型 类名::*成员指针变量名 = &类名::成员变量;
    2)使用
       对象.*成员指针变量名;
       对象指针->*成员指针变量名;
     ".*":成员指针解引用运算符
     "->*":间接成员指针解引用运算符
    注:成员变量指针的本质是类中特定成员在对象中的相对地址。
    
    2 成员函数指针
    1)定义
       返回类型 (*类名::成员函数指针)(形参表) 
               = &类名::成员函数名;
    2)使用
       (对象.*成员函数指针)(实参表);
       (对象指针->*成员函数指针)(实参表);
    
    ==================
    二十 操作符重载
    eg:复数x+yi 3+4i
    (1+2i) + (3+4i) = 4+6i
    1 双目操作符
    1.1 运算类的双目操作符(L # R):+ - * /
    -->左右操作数可以是左值也可以是右值
    -->表达式结果是右值
    1)成员函数形式
    L#R的表达式会被编译器自动处理为L.operator#(R)的成员函数调用,该函数的返回值即为表达式的值。
    
    2)全局函数形式 
    
    1.2 赋值类的双目操作符
    
    练习:复习String类和单例模式实现
  • 相关阅读:
    Collatz Conjecture(BAPC2017)
    P3377 【模板】左偏树(可并堆)
    Mergeable Stack
    B. Our Tanya is Crying Out Loud(cf)and 5918: 改变(中石油)
    bzoj 4488: [Jsoi2015]最大公约数
    Zoj
    牛客练习赛43 回顾
    哈尔滨工程大学ACM预热赛 补题
    April Fools Day Contest 2019: editorial回顾补题
    第一周总结
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7729757.html
Copyright © 2011-2022 走看看