• 《C++ Primer Plus》12.6 复习各种(类和动态内存分配的)技术 笔记


    12.6.1 重载<<运算符
    要重新定义<<运算符,以便将它和cout一起用来显示对象的内容,请定义下面的友元运算符函数:
    ostream & operator<<(ostream & os, const c_name & obj)
    {
        os << ...;  // display object contents
        return os;
    }
    其中,c_name是类名。如果该类提供了能够返回所需内容的公有方法,则可在运算符函数中使用这些方法,这样便不用将它们设置为友元函数了。

    12.6.2 转换函数
    要将单个值转换为类类型,需要创建原型如下所示的类构造函数:
    c_name(type_name value);
    其中c_name为类名,type_name是要转换的类型的名称。
    要将类转换为其他类型,需要创建原型如下所示的类成员函数:
    operator type_name();
    虽然该汉俗话没有声明返回类型,但应返回所需类型的值。
    使用转换函数时要小心。可以在声明构造函数时使用关键字explicit,以防止它被用于隐式转换。

    12.6.3 其构造函数使用new的类
    如果类使用new运算符来分配类成员指向的内存,在设计时应采取一些预防措施(前面总结了这些预防措施,应牢记这些规则,这是因为编译器并不知道这些规则,因此无法发现错误)。
    * 对于指向的内存时由new分配的所有类成员,都应该在类的析构函数中对其使用delete,该运算符将释放分配的内存。
    * 如果析构函数通过对指针类成员使用delete来释放内存,则每个构造函数都应当使用new来初始化指针,或将它设置为空指针。
    * 应定义一个分配内存(而不是将指针指向已有内存)的复制构造函数。这样程序将能够将类对象初始化为另一个类对象。这种狗早函数的原型通常如下:
    className(const className &)
    应定义一个重载赋值运算符的类成员函数,其函数定义如下(其中c_pointer是c_name的类成员,类型指向type_name的指针)。下面的示例假设使用new[]来初始化变量c_pointer:
    c_name & c_name::operator=(const c_name & cn)
    {
        if (this == & cn)
            return this;    // done if self-assignment
        delete [] c_pointer;
        // set size number of type_name units to be copied
        c_pointer = new type_name[size];
        // then copy data pointed to by cn.c_pointer to
        // location pointed to by c_pointer
        ...
        return *this;
    }

  • 相关阅读:
    Qt中实现单例模式(SingleTon)
    毕设开发手记(二)
    Qt中由表中单元格的QModelIndex获取Global Pos的正确方法
    Qt的槽可以使用默认参数
    C#结构的了解
    dos命令集江南技术联盟
    C#中的abstract与virtual的用法
    [转]六种删除数据库重复行的方法
    PL/SQL的TO_CHAR()与TO_DATE()
    索引索引索引(转)
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5662246.html
Copyright © 2020-2023  润新知