| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 743 人关注过本帖
标题:请教一个拷贝构造函数
只看楼主 加入收藏
qong
Rank: 2
等 级:论坛游民
帖 子:9
专家分:11
注 册:2011-8-2
结帖率:50%
收藏
 问题点数:0 回复次数:9 
请教一个拷贝构造函数
程序代码:
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

class Remo {
    public:
        Remo(int xx,int yy) {
            x=xx;
            y=yy;
        }
        Remo(const Remo& temp);
        int GetX() {
            return x;
        }
        int GetY() {
            return y;
        }
    private:
        int x;
        int y;
};

int main() {
    int x,y;
    Remo frist(1,2);
    Remo second=frist;
    x=second.GetX();
    y=second.GetY();
    cout << x << endl;
    cout << y << endl;
    return 0;
}                    /*不知道为什么会出错,编译的时候通过了,链接的时候怎么都通不过*/
        
2011-08-19 08:54
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:0 
应该是类中的const引用出了问题
2011-08-19 09:52
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:0 
Remo(const Remo& temp);
没有定义么。~
改成
Remo(const Remo& temp) {
            this->x = temp.x;
            this->y = temp.y;
}

测试Ok~

ps:补充一个默认的构造函数Remo()更好吧。。

[ 本帖最后由 naruto01 于 2011-8-19 10:21 编辑 ]
2011-08-19 10:17
xinshou1991
Rank: 2
等 级:论坛游民
帖 子:35
专家分:45
注 册:2011-7-25
收藏
得分:0 
对!就像3楼说的,拷贝构造函数只声明了,没有定义!定义下就ok啦,还可以这样:
Remo(const Remo& temp) {
            x = temp.x;
            y = temp.y;
}
那个this指针还是不用的好(用不用都一样,this指针是“隐形”的,写出来只不过让它现形而已)。
2011-08-21 19:37
开了口的记忆
Rank: 2
等 级:论坛游民
帖 子:30
专家分:14
注 册:2011-8-23
收藏
得分:0 
拷贝构造函数只声明了,没有定义定义下应该就可以吧。。。
2011-08-24 16:31
ljw970243
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:43
专家分:105
注 册:2011-8-20
收藏
得分:0 
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

class Remo {
    public:
        Remo(int xx,int yy) {
            x=xx;
            y=yy;
        }
        Remo(const Remo& temp);
        int GetX() {
            return x;
        }
        int GetY() {
            return y;
        }
        //赋值运算符
        Remo &operator =(const Remo& temp);//要自己实现
    private:
        int x;
        int y;
};

int main() {
    int x,y;
    Remo frist(1,2);
    Remo second=frist;//这里用的是赋值运算符
    //Remo second(frist);//你定义的拷贝构造函数是这么用的
    x=second.GetX();
    y=second.GetY();
    cout << x << endl;
    cout << y << endl;
    return 0;
}

[ 本帖最后由 ljw970243 于 2011-8-27 09:50 编辑 ]
2011-08-27 09:49
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
程序代码:
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

class Remo {
    public:
        Remo(int xx,int yy) {
            x=xx;
            y=yy;
        }
        Remo(const Remo& temp){};// 这里 你没有加{} 来实现这个函数 你只是定义了!
        int GetX() {
            return x;
        }
        int GetY() {
            return y;
        }
    private:
        int x;
        int y;
};

int main() {
    int x,y;
    Remo frist(1,2);
    Remo second=frist;
    x=second.GetX();
    y=second.GetY();
    cout << x << endl;
    cout << y << endl;
    return 0;
}

君生我未生 我生君以老
2011-08-27 11:29
开了口的记忆
Rank: 2
等 级:论坛游民
帖 子:30
专家分:14
注 册:2011-8-23
收藏
得分:0 
定义就可以了
2011-09-02 10:58
lqsh
Rank: 2
来 自:山东济南
等 级:论坛游民
帖 子:26
专家分:58
注 册:2011-8-29
收藏
得分:0 
#include <iostream>
using namespace std;//统一命名空间

class Remo {
public:
    Remo(int xx=0,int yy=0):x(xx),y(yy){
    }//带可选参数构造函数,方便定义Remo对象数组
    Remo(const Remo& temp)
    {
        x=temp.x;
        y=temp.y;
    }//拷贝构造函数,数据成员没有涉及指针变量,不显式定义也可实现你的功能,c++中称此为浅拷贝。
    int GetX() {
        return x;
    }
    int GetY() {
        return y;
    }
private:
    int x;
    int y;
};

int main() {
    int x,y;
    Remo frist(1,2);
    Remo second=frist;
    x=second.GetX();
    y=second.GetY();
    cout << x << endl;
    cout << y << endl;
    return 0;
}                  
2011-09-02 17:08
wyane
Rank: 2
等 级:论坛游民
帖 子:14
专家分:12
注 册:2009-9-18
收藏
得分:0 
正像ljw970243所说的,还应重载=号操作符
2011-09-04 12:29
快速回复:请教一个拷贝构造函数
数据加载中...
 
   



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

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