zoukankan      html  css  js  c++  java
  • 《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;
    }

  • 相关阅读:
    /etc/sysctl.conf 控制内核相关配置文件
    python 并发编程 非阻塞IO模型
    python 并发编程 多路复用IO模型
    python 并发编程 异步IO模型
    python 并发编程 阻塞IO模型
    python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
    python 并发编程 基于gevent模块实现并发的套接字通信
    python 并发编程 io模型 目录
    python 并发编程 socket 服务端 客户端 阻塞io行为
    python 并发编程 IO模型介绍
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5662246.html
Copyright © 2011-2022 走看看