zoukankan      html  css  js  c++  java
  • C++学习(五)

    一、拷贝构造函数和拷贝赋值运算符
    1.拷贝构造:用一个已有的对象,构造和它同类型的副本对象——克隆。
    2.形如
    class X {
      X (const X& that) { ... }
    };
    的构造函数成为拷贝构造函数。如果一个类没有定义拷贝构造函数,系统会提供一个缺省拷贝构造函数。缺省拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型的成员变量,调用相应类型的拷贝构造函数。
    3.在某些情况就下,缺省拷贝构造函数只能实现浅拷贝,如果需要获得深拷贝的复制效果,就需要自己定义拷贝构造函数。
    4.形如
    class X {
      X& operator= (const X& that) {
        ...
      }
    };
    的成员函数称为拷贝赋值运算符函数。如果一个类没有定义拷贝赋值运算符函数,系统会提供一个缺省拷贝赋值运算符函数。缺省拷贝赋值运算符函数对于基本类型的成员变量,按字节复制,对于类类型的成员变量,调用相应类型的拷贝赋值运算符函数。
    5.在某些情况就下,缺省拷贝赋值运算符函数只能实现浅拷贝,如果需要获得深拷贝的复制效果,就需要自己定义拷贝赋值运算符函数。
    练习:实现一个简化版的字符串类String支持:
    1.用字符指针形式的字符串构造
    2.拷贝构造和拷贝赋值
    3.获取字符指针形式字符串的成员函数,类似string::c_str
    说明:不得使用std::string!
    二、静态成员
    1.静态成员变量和静态成员函数是属于类的而非属于对象。
    2.静态成员变量,为多个对象所共享,只有一份实例,可以通过对象访问也可以通过类访问,必须在类的外部定义并初始化。静态成员变量本质上与全局变量并没有区别,只是多了类作用域的约束,和访控属性的限制。
    class Account {
    private:
      string m_name;
      double m_balance;
      static double m_rate;
    };
    3.静态成员函数,没有this指针,无法访问非静态成员。
    4.单例模式
    三、成员指针
    Student s;
    string* p = &s.m_name; // 不是
    Student s2;
    (一)成员变量指针
    1.定义
    成员变量类型 类名::*指针变量名;
    string Student::*pname;
    int Student::*page;
    2.初始化/赋值
    指针变量名 = &类名::成员变量名
    pname = &Student::m_name;
    page = &Student::m_age;
    3.解引用
    对象.*指针变量名
    对象指针->*指针变量名
    Student s, *p = &s;
    s.*pname = "张飞";
    cout << p->*page << endl;
    (二)成员函数指针
    1.定义
    成员函数返回类型 (类名::*指针变量名) (参数表)
    void (Student::*plearn) (const string&) const;
    2.初始化/赋值
    指针变量名 = &类名::成员函数名;
    plearn = &Stduent::learn;
    3.解引用
    (对象.*指针变量名) (实参表);
    (对象指针->*指针变量名) (实参表);
    (s.*plearn) ("C++");
    (p->*plearn) ("UNIX");
    第三课  操作符重载
    复数:3+4i
    Complex
    c1 - (c2 + c3)
    c1.sub (c2.add (c3))
    一、操作符标记和操作符函数
    1.双目操作符:L#R
    成员函数形式:L.operator# (R)
    左调右参
    全局函数形式:::operator# (L, R)
    左一右二
    2.单目操作符:#O/O#
    成员函数形式:O.operator# ()
    全局函数形式:::operator# (O)
    3.三目操作符:不考虑
    二、双目操作符
    1.+/-/*//
    操作数在计算前后不变。
    表达式的值是右值。

  • 相关阅读:
    C#代码中函数调用相关问题
    C#语言编写代码时常用的三大循环
    c#语言中的类型转换
    tesseract_vs2015工具包使用
    Halcon除法
    halcon批量读取图片
    halcon分离路径名称
    Halcon旋转图片的研究
    关于Haclon使用GPU加速的代码实例
    OpenCV代码:画出轮廓的外接矩形,和中心点
  • 原文地址:https://www.cnblogs.com/fanghui/p/3323229.html
Copyright © 2011-2022 走看看