正文

《高级函数》学习笔记2006-10-16 21:58:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/colormoon/19395.html

分享到:

1.构造函数中初始化对象的成员变量。掌握这种方法。

CAT():

ItsAge(5),

ItsWeight(8)

{}

2.复制构造函数在每次复制一个对象时调用。所有的复制构造函数均有一个参数,即对同一个类的对象的引用。使这个引用成为常量最好,这样构造函数就不必改变传递进来的对象。如:

CAT(const CAT& theCat);

3.一般的复制构造函数,执行的是成员复制,简单的将成员变量复制到新的对象中,这样容易造成内存泄漏(迷途指针)。因此,复制构造函数采取开辟新的内存区来避免这种问题的发生,这也叫深层复制。如:

CAT(const CAT& rhs)

{itsAge=new int;itsWeight=new int;

  *itsAge=rhs.GetAge();*itsWeight=rhs.GetWeight();}

4.运算符重载。让对象之间(其实是对象的成员变量)可以直接进行加减乘除等运算。

重载前置运算符的格式:returnType operator op;这里op是要重载的运算符(+、—等)。如

void operator ++(){++itsVal;}

在生成的对象i进行自加执行简单的命令:++i;

如果要将自加后的对象赋给其他的对象,则只需修改函数返回值的类型为类对象。

几种不同的前置运算符的声明方法,注意返回值的类型:

classType operator ++(){++itsVal;return classType(itsVal);}

const classType& operator ++(){++itsVal;returh *this;}

在效率方面,最后一个声明语句较好。

5.后置运算符的声明。同前置运算符的区别在于加入一个整型参数。如:

void operator ++(int flag){itsVal++;}

其中参数flag并不参加任何运算,只是标明是后置运算符的声明。

6.重载加号运算符。声明如下:

classType operator+ (const classType& rhs){return classType(itsVal+rhs.GetVal());}

这样可以对实例化的两个对象进行加法运算。

7.赋值运算符。声明如下:

classType operator= (classType& rhs);

为避免对象对自身的赋值,必须检查赋值运算符的右边是否是对象的本身。实现如下:

{if(*this==rhs) return;

..........................

return *this;}

8.处理数据类型的转换。比如将一个数据类型变量如int或unsigned int赋给用户自定义的对象。如果没有其他构造函数,编译器会报错。

为完成这种类型转换,需要添加一个用此种数据类型的变量做参数的构造函数。如

CAT(it val);

这个构造函数从整型变量创建一个CAT对象。

要注意,所有的运算符重载均是以同样的方式进行的——用operator声明重载运算符。对于双目运算符(如=或+),右边的变量变成了参数。这是由构造函数完成的。如:

a=b;

变成

a.operator=(b);

阅读(2344) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册