首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 语言基础 >> 正文
C++面向对象编程入门:C++类对象的复制-拷贝构造函数(3)
作者:管宁    文章来源:PConline    更新时间:2006-5-9 10:02:51
先运行下列代码:

#include <iostream
using namespace std; 
 
class Internet 

public
    Internet() 
    { 
         
    }; 
    Internet(char *name,char *address) 
    { 
        cout<<"载入构造函数"<<endl; 
        strcpy(Internet::name,name); 
    } 
    Internet(Internet &temp) 
    { 
        cout<<"载入COPY构造函数"<<endl; 
        strcpy(Internet::name,temp.name); 
        cin.get(); 
    } 
    ~Internet() 
    { 
        cout<<"载入析构函数!"; 
        cin.get(); 
    } 
protected
    char name[20]; 
    char address[20]; 
}; 
Internet tp() 

    Internet b("中国软件开发实验室","www.cndev-lab.com"); 
    return b; 

void main() 

    Internet a; 
    a=tp(); 
}

  从上面的代码运行结果可以看出,程序一共载入过析构函数三次,证明了由函数返回自定义类型对象同样会产生临时变量,事实上对象a得到的就是这个临时Internet类类型对象temp的值。

  这一下节的内容我们来说一下无名对象

  利用无名对象初始化对象系统不会不调用拷贝构造函数。

  那么什么又是无名对象呢?

  很简单,如果在上面程序的main函数中有:

  Internet ("中国软件开发实验室","www.cndev-lab.com");

  这样的一句语句就会产生一个无名对象,无名对象会调用构造函数但利用无名对象初始化对象系统不会不调用拷贝构造函数!

  下面三段代码是很见到的三种利用无名对象初始化对象的例子。

#include <iostream
using namespace std; 
 
class Internet 

public
    Internet(char *name,char *address) 
    { 
        cout<<"载入构造函数"<<endl; 
        strcpy(Internet::name,name); 
    } 
    Internet(Internet &temp) 
    { 
        cout<<"载入COPY构造函数"<<endl; 
        strcpy(Internet::name,temp.name); 
        cin.get(); 
    } 
    ~Internet() 
    { 
        cout<<"载入析构函数!"; 
    } 
public
    char name[20]; 
    char address[20]; 
}; 
 
void main() 

    Internet a=Internet("中国软件开发实验室","www.cndev-lab.com"); 
    cout<<a.name; 
    cin.get(); 
}

  上面代码的运行结果有点“出人意料”,从思维逻辑上说,当无名对象创建了后,是应该调用自定义拷贝构造函数,或者是默认拷贝构造函数来完成复制过程的,但事实上系统并没有这么做,因为无名对象使用过后在整个程序中就失去了作用,对于这种情况c++会把代码看成是:

Internet a("中国软件开发实验室",www.cndev-lab.com);

  省略了创建无名对象这一过程,所以说不会调用拷贝构造函数。

相关文章:
Symbian 真机http上传下载文件
C++基础:常量成员函数特殊说明
Python应用于Series 60平台入门——名词和缩写
函数的命名约定和内存管理学习体会
Symbian OS异常三步曲之三:两段构造
Symbian OS 错误码
描述符浅析
C++字符串类实现
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号