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类和单例模式实现
  • 相关阅读:
    C++中使用多线程
    hdu 4223 dp 求连续子序列的和的绝对值最小值
    hdu 1372 bfs 计算起点到终点的距离
    hdu 4217 线段树 依次取第几个最小值,求其sum
    心得
    hdu 1175 bfs 按要求进行搜索,是否能到达,抵消两个(相同)棋子
    hdu 4221 greed 注意范围 工作延期,使整个工作时间罚时最少的单个罚时最长的值
    hdu 2844 多重背包 多种硬币,每一种硬币有一点数量,看他能组成多少种钱
    uva LCDDisplay
    hdu 4218 模拟 根据一个圆点和半径画一个圆 注意半径要求
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7729757.html
Copyright © 2011-2022 走看看