网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.线性表的顺序存储实验.
.用C++在WIN.INI中保存信息.
.温故而知新:C++常用排序算法.
.两个截取字符串的实用方法(超过.
.猜数游戏.
.C++中通过溢出覆盖虚函数指针列表.
.C++中几个比较不常用的关键字.
.2000年9月基础知识知识和C语言程.
.use Assembly to call a method.
.C++程序设计从零开始之指针.
.DOS界面下通用图形编辑软件的设计.
.关于魔方阵的解法.
.拨号上网IP地址的检知.
.使用ASP.NET Atlas开发检测密码强.
.用托管C++编写Windows服务.
.C++Builder动态更改自定义打印纸.
.i++,i--的前置,后置++i,--i的详细.
.C++ 中的Singleton 类的实现讨论.
.在BCB中使用VCL控件数组1.
.完整的读写函数.

C++运算符重载赋值运算符

发表日期:2008-3-8



  自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注重的是,它与拷贝构造函数与析构函数一样,要注重深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,假如没有指定默认的赋值运算符重载函数,
那么系统将会自动提供一个赋值运算符重载函数。

  赋值运算符重载函数的定义与其它运算符重载函数的定义是差不多的。

  下面我们以实例说明如何使用它,代码如下:
//程序作者:管宁 
//站点:www.cndev-lab.com 
//所有稿件均有版权,如要转载,请务必闻名出处和作者 
 
#include <iostream>     
using namespace std;     
     
class Internet 

    public: 
        Internet(char *name,char *url) 
        { 
            Internet::name = new char[strlen(name)+1]; 
            Internet::url = new char[strlen(url)+1]; 
            if(name) 
            { 
                strcpy(Internet::name,name); 
            } 
            if(url) 
            { 
                strcpy(Internet::url,url); 
            } 
        } 
        Internet(Internet &temp) 
        { 
            Internet::name=new char[strlen(temp.name)+1]; 
            Internet::url=new char[strlen(temp.url)+1]; 
            if(name) 
            { 
                strcpy(Internet::name,temp.name); 
            } 

            if(url) 
            { 
                strcpy(Internet::url,temp.url); 
            } 
        } 
        ~Internet() 
        { 
            delete[] name; 
            delete[] url; 
        } 
        Internet& operator =(Internet &temp)//赋值运算符重载函数 
        { 
            delete[] this->name; 
            delete[] this->url; 
            this->name = new char[strlen(temp.name)+1]; 
            this->url = new char[strlen(temp.url)+1]; 
            if(this->name) 
            { 
                strcpy(this->name,temp.name); 
            } 
            if(this->url) 
            { 
                strcpy(this->url,temp.url); 
            } 
            return *this; 
        } 
    public: 
        char *name; 
        char *url; 
}; 
int main() 
{   
    Internet a("中国软件开发实验室","www.cndev-lab.com"); 
    Internet b = a;//b对象还不存在,所以调用拷贝构造函数,进行构造处理。 

    cout<<b.name<<endl<<b.url<<endl; 
    Internet c("美国在线","www.aol.com"); 
    b = c;//b对象已经存在,所以系统选择赋值运算符重载函数处理。 
    cout<<b.name<<endl<<b.url<<endl; 
    system("pause"); 
}  上例代码中的Internet& operator =(Internet &temp)就是赋值运算符重载函数的定义,内部需要先delete的指针就是涉及深拷贝问题的地方,由于b对象已经构造过,name和url指针的范围已经确定,所以在复制新内容进去之前必须把堆区清除,区域的过大和过小都不好,所以跟在后面重新分配堆区大小,而后进行复制工作。

  在类对象还未存在的情况下,赋值过程是通过拷贝构造函数进行构造处理(代码中的Internet b = a;就是这种情况),但当对象已经存在,那么赋值过程就是通过赋值运算符重载函数处理(例子中的b = c;就属于此种情况)。 更多文章 更多内容请看C/C++技术专题专题,或
上一篇:C++的iostream标准库介绍(1) 人气:1118
下一篇:C++中利用构造函数与无名对象简化运算符重载函数 人气:758
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐