免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1720 | 回复: 2
打印 上一主题 下一主题

结构体赋值的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-25 11:58 |只看该作者 |倒序浏览

  1. /*
  2. * File:   main.cpp
  3. * Author: zombo
  4. *
  5. * Created on 2009年6月25日, 上午8:54
  6. */

  7. #include <stdlib.h>
  8. #include <iostream>

  9. using namespace std;

  10. typedef struct dam {
  11.     int data;
  12.     int len;

  13.    void  operator()() {
  14.         this->data = 0;
  15.         this->len = 0;
  16.     }

  17. /*   void operator= ( dam value) {*/
  18.            //this->data = value.data;
  19.            //this->len = value.len;
  20. /*   }*/
  21.    dam& operator= (dam value) {
  22.            this->data = value.data;
  23.            this->len = value.len;
  24.            return *this;
  25.    }

  26.    void print ( ) {
  27.        cout << "data="<<this->data << "\tlen=" << this->len <<endl;
  28.    }

  29. } DAM, *PDAM;

  30. typedef struct greendam {
  31.     PDAM pvalue;
  32.     //DAM value;

  33.     void operator()() {
  34.         pvalue = new dam();
  35.     }

  36.     greendam& operator= (greendam gdam) {
  37.             this->pvalue = gdam.pvalue;
  38.             return *this;
  39.     }

  40.     void print() {
  41.             this->pvalue->print();
  42.     }


  43. } GDam, *PGDam;

  44. /*
  45. *
  46. */
  47. int main(int argc, char** argv) {

  48.     PDAM as = new dam();

  49.    PGDam pgDam = new greendam();
  50.    GDam gdam;
  51.    gdam.pvalue = new dam();

  52.    gdam.print();  //正确
  53.    pgDam->print();  //错误
  54.    pgDam->pvalue->print();  // 错误

  55.     return (EXIT_SUCCESS);
  56. }


复制代码


结构体指针不能够实现正确的打印,但是,在重载函数里,已经生成一个新的结构体,并把指针传给它了

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2009-06-25 13:01 |只看该作者
#include <iostream>

struct dam
{
        friend std::ostream& operator<<( std::ostream& os, const dam& d );
public:
        dam() : data_(0), len_(0)
        {
        }
        dam& operator=( const dam& rhs )
        {
                data_ = rhs.data_;
                len_ = rhs.len_;
                return *this;
        }
private:
        int data_;
        int len_;
};

std::ostream& operator<<( std::ostream& os, const dam& d )
{
        return os << "data=" << d.data_ << "\tlen=" << d.len_;
}

struct greendam
{
        friend std::ostream& operator<<( std::ostream& os, const greendam& d );
public:
        greendam() : pvalue_( new dam() )
        {
        }
        greendam( const greendam& rhs ) : pvalue_( new dam(*rhs.pvalue_) )
        {
        }
        greendam& operator=( const greendam& rhs )
        {
                if( this != &rhs )
                {
                        delete pvalue_;
                        pvalue_ = new dam( *rhs.pvalue_ );
                }
                return *this;
        }
        ~greendam()
        {
                delete pvalue_;
        }
private:
        dam* pvalue_;
};

std::ostream& operator<<( std::ostream& os, const greendam& d )
{
        return operator<<( os, *d.pvalue_ );
}


int main()
{
        using namespace std;

        dam a;
        cout << a << endl;

        greendam b;
        cout << b << endl;

        return 0;
}

论坛徽章:
0
3 [报告]
发表于 2009-06-25 13:12 |只看该作者
thanks
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP