被无视的伊谢尔伦

雕栏玉砌应犹在,只是朱颜改

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  9 随笔 :: 0 文章 :: 6 评论 :: 0 Trackbacks
  1. 重载<<操作符
    要重新定义<<操作符,以便将它和cout一起用来显示对象的内容,请定义下面的友元操作符函数:
    ostream & operator << (ostream & os,const c_name & obj)
    {
    os 
    << ;// display object contents
    return os;
    }

    其中c_name是类名。如果该类提供了能够返回所需内容的公有方法,则可在操作符函数中使用这些方法,这样便不会将他们设置为友元函数了。
  2. 转换函数
    要将单个值转换为类类型,需要创建原型如下所示的类构造函数:
    c_name(type_name value);

    其中c_name为类名,type_name是要转换的类型的名称。
    要将类转换为其他类型,需要创建原型如下所示的类成员函数:
    operator type_name();

    虽然该函数没有声明返回类型,但应返回所需类型的值。
    使用转换函数时要小心。可以在声明构造函数时使用关键字explicit,以防止它被用于隐式转换。
  3. 其构造函数使用new的类
    如果类使用new操作符来分配类成员指向的内存,在设计时应采取一些预防措施。
  • 对于指向的内存是由new分配的所有类成员,都应在类的析构函数中对其使用delete,该操作符将释放分配的内存。
  • 如果析构函数通过对指针类成员使用delete来释放内存,则每个构造函数都应当使用new来初始化指针,或将它设置为空指针。
  • 构造函数中要么使用new[],要么使用new,而不能混用。如果构造函数使用的是new[],则析构函数应使用delete[];如果构造函数使用的是new,则析构函数应适用delete。
  • 应定义一个分配内存(而不是将指针指向已有内存)的复制构造函数。这样程序能够将类对象初始化为另一个对象。这种构造函数原型如下:
    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;

    delete [] c_pointer;
    // set size number of type_name units to be copyied
    c_pointer = new type_name[size];
    // then copy data pointed to by cn.c_pointer to
    // location pointed to by c_pointer

    return *this;
    }

本文对我前面几篇随笔中提到的问题也作出了一个总结,感觉很有必要记下来。
以上内容原文引用自参考书籍中内容。

参考书籍:C++PrimerPlus author:Stephen Prata

posted on 2006-09-28 15:18 爱上青菜的包子 阅读(764) 评论(1)  编辑 收藏 引用 所属分类: C++

评论

# re: C++学习笔记:类与动态内存分配中各种问题的阶段性总结 2007-12-03 15:56 光能
四火你小子写的那么多呀!牛人一个!几时也告诉我c++方面从哪里入手啊!
--光能路过
  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理