| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 568 人关注过本帖
标题:重载赋值运算符不能完全拿到数据的问题
只看楼主 加入收藏
lsrwan
Rank: 2
等 级:论坛游民
帖 子:31
专家分:17
注 册:2009-10-11
结帖率:90%
收藏
已结贴  问题点数:6 回复次数:4 
重载赋值运算符不能完全拿到数据的问题
问题叙述
1 在代码  b = c = a;一行b c 没有拿到a的全部数据,而是只拿到部分数据,有图为证this的数值明明已经被赋值,为何拿不到?
2 swap(VectorStudent.begin(),VectorStudent2.begin());一行的计算结果并没有实现两个vector的交换
望给位前辈能指点迷境!

图片附件: 游客没有浏览图片的权限,请 登录注册

// stl_swap3.cpp : Defines the entry point for the console application.
//

// stl_swap_2.cpp : Defines the entry point for the console application.
//
#pragma warning(once:4385)   
#include "stdafx.h"
#include <vector>
#include <algorithm>
#include <algorithm>
#include <iostream>
using namespace std;

struct student
{
   
public:
    int num;
    int sex;
    int age;
public:
    student(const int nNum,const int nSex,const int nAge)
    {
        num = nNum;
        sex = nSex;
        age = nAge;
    }
    student()
    {}
    student& operator = (const student& aStu)
    {
        if (this == &aStu)
        {}
        else
        {
            this->age = aStu.age;
            this->sex = aStu.sex;
            this->age = aStu.age;
        }
        return *this;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    //student Array[5] = {{1,0,13},{2,0,14},{3,1,10},{4,0,11},{5,1,35}};
    /*student Array2[5] = {{1,0,23},{2,0,24},{3,1,20},{4,0,21},{5,1,15}};
    vector<student> VectorStudent(5),VectorStudent2(5);
    for(short i = 0; i < 5; i++)
    {
        VectorStudent[i] = (student)Array[i];
        VectorStudent2[i] = (student)Array2[i];
    }*/
    vector<student> VectorStudent(5),VectorStudent2(5);
    VectorStudent[0].num = 1;
    VectorStudent[0].sex = 0;
    VectorStudent[0].age = 13;
   

    VectorStudent[1].num = 2;
    VectorStudent[1].sex = 0;
    VectorStudent[1].age = 14;

    VectorStudent[2].num = 3;
    VectorStudent[2].sex = 1;
    VectorStudent[2].age = 10;

    VectorStudent[3].num = 4;
    VectorStudent[3].sex = 0;
    VectorStudent[3].age = 11;

    VectorStudent[4].num = 5;
    VectorStudent[4].sex = 0;
    VectorStudent[4].age = 35;
   
    VectorStudent2[0].num = 1;
    VectorStudent2[0].sex = 0;
    VectorStudent2[0].age = 23;

    VectorStudent2[1].num = 2;
    VectorStudent2[1].sex = 0;
    VectorStudent2[1].age = 24;

    VectorStudent2[2].num = 3;
    VectorStudent2[2].sex = 1;
    VectorStudent2[2].age = 20;

    VectorStudent2[3].num = 4;
    VectorStudent2[3].sex = 0;
    VectorStudent2[3].age = 21;

    VectorStudent2[4].num = 5;
    VectorStudent2[4].sex = 1;
    VectorStudent2[4].age = 15;

    student a = VectorStudent2[4];
    a = a;
    student b,c;
    b = c = a;
    swap(VectorStudent.begin(),VectorStudent2.begin());
    for each(student elem in VectorStudent)
    {
        cout << elem.num << "  "<< elem.age<< "  " << elem.sex<< "  "<< endl;
    }
    for each(student elem in VectorStudent2)
    {
        cout << elem.num << "  "<< elem.age<< "  " << elem.sex<< "  "<< endl;
    }
    return 0;
}
搜索更多相关主题的帖子: 运算符 赋值 数据 重载 
2010-04-24 16:09
lsrwan
Rank: 2
等 级:论坛游民
帖 子:31
专家分:17
注 册:2009-10-11
收藏
得分:0 
不好意思,知道原因了,打错数据了,不好意思。现在我只问第二个问题,现在我只问第二个问题为什么不能swap数值。

[ 本帖最后由 lsrwan 于 2010-4-24 16:14 编辑 ]
2010-04-24 16:11
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:3 
VectorStudent.swap(VectorStudent2);
2010-04-24 19:54
lsrwan
Rank: 2
等 级:论坛游民
帖 子:31
专家分:17
注 册:2009-10-11
收藏
得分:0 
楼上的高,实在是高,你的方法确实可以,可以说下原因么?为什么我的形式就不能呢?两者有什么不一样么?期待你的解答!!
2010-04-25 20:32
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:3 
你那种形式没问题,只是你用错了。
swap(VectorStudent,VectorStudent2);
了解这个函数,你应该看看它的源码。
2010-04-25 20:50
快速回复:重载赋值运算符不能完全拿到数据的问题
数据加载中...
 
   



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

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