| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 402 人关注过本帖
标题:关于复制函数
取消只看楼主 加入收藏
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:2 
关于复制函数
下面代码是为了反应默认构造函数,复制构造函数,析构函数的调用情况
问:  Exmpl val3=Exmpl();//c++primer   p407   先用默认构造函数构造一个临时对象,再用复制函数。对啊,既然是临时对象,那是不是还要调用析构函数?
可由截图知 他只用了默认构造。。。?
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码:
#include <iostream>
#include<string>
#include <vector>
#include"Exmpl.h"
using namespace std;
void fun1(Exmpl a)
{}
void fun2(Exmpl &b)
{}
Exmpl fun3()
{
        Exmpl obj;
        return obj;//复制函数
}
int main(){
    cout<<"        Exmpl val1;//用默认构造函数"<<endl;
    Exmpl val1;//用默认构造函数
    cout<<"        Exmpl val3=Exmpl();//默认构造函数,复制"<<endl;
    Exmpl val3=Exmpl();//c++primer   p407    默认构造函数构造了一个临时对象,然后复制构造函数用该对象初始化        默认构造,复制构造
    cout<<"            Exmpl val2=val1;//复制函数"<<endl;
    Exmpl val2=val1;//复制函数
    cout<<"        fun1(val1);//复制函数  void fun1(Exmpl a)"<<endl;
    fun1(val1);//复制函数
    cout<<"        fun2(val1);//无需复制    void fun2(Exmpl &b)"<<endl;
    fun2(val1);//无需复制
    cout<<"        val1.input(cin);"<<endl;
    val1.input(cin);
    cout<<"        val2=val1;"<<endl;
    val2=val1;
    cout<<"        fun3();    Exmpl fun3() Exmpl obj; return obj;//复制函数}"<<endl;
    fun3();
    cout<<"        Exmpl *p=new Exmpl;//默认构造函数创造动态的。。。"<<endl;
    Exmpl *p=new Exmpl;//默认构造函数创造动态的。。。
    cout<<"        vector<Exmpl> vec(3);//默认构造函数创建一个临时对象,在复制构造函数复制到vector的各个元素然后析构函数删除临时对象   "<<endl;
    vector<Exmpl> vec(3);//默认构造函数创建一个临时对象,在复制构造函数复制到vector的各个元素然后析构函数删除临时对象    
    cout<<"        delete p;"<<endl;
    delete p;
    cout<<"        return 0;"<<endl;
    return 0;
}

struct Exmpl{
    //默认 构造函数
    Exmpl():ival(0)
    { 
        std::cout<<"Exmpl"<<std::endl;

    }
    //复制构造函数
    Exmpl(const Exmpl& E):ival(E.ival),sval(E.sval)
    {
    std::cout<<"Exmpl(const Exmpl&)"<<std::endl;
     }
    //输入的构造
    std::istream & input(std::istream& in)
    {
        std::cout<<"input   "<<"enter int and string"<<std::endl;
        in>>ival>>sval;
        return in;
    }
    //赋值操作符
    Exmpl& operator =(const Exmpl &eq)
    {
        std::cout<<"operator ="<<std::endl;
        ival=eq.ival;
        sval=eq.sval;
        return *this;
    }
    //析构函数
    ~Exmpl()
    {
        std::cout<<"~Exmpl()"<<std::endl;
    }

    int ival;
    std::string sval;
};
  谢谢
搜索更多相关主题的帖子: include 
2012-08-23 09:12
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
回复 6楼 静若子水
复制和析构在输出的结果上没体现。。。还是楼上说的优化了吧
2012-08-25 07:51
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
谢谢各位
2012-08-25 07:53
快速回复:关于复制函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052752 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved